Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C代码的Makefile_C_Linux_Makefile_Cplex - Fatal编程技术网

C代码的Makefile

C代码的Makefile,c,linux,makefile,cplex,C,Linux,Makefile,Cplex,我继承了一个包含makefile的代码,但到目前为止,我无法在linux服务器上运行它。编译器的主要抱怨是无法加载libgmp.so.3:加载共享库时出错:libgmp.so.3。我知道此服务器上存在libgmp.so.10,但我想知道需要更改生成文件的哪个部分,以便编译器查找libgmp.so.10,而不是libgmp.so.3 OPTFLAG=-O2-Wall-fPIC-feexceptions-DNDEBUG LDFLAGS=-O2-Wl,-no_compact_unwind-DNDEBU

我继承了一个包含makefile的代码,但到目前为止,我无法在linux服务器上运行它。编译器的主要抱怨是无法加载
libgmp.so.3
加载共享库时出错:libgmp.so.3
。我知道此服务器上存在
libgmp.so.10
,但我想知道需要更改生成文件的哪个部分,以便编译器查找
libgmp.so.10
,而不是
libgmp.so.3

OPTFLAG=-O2-Wall-fPIC-feexceptions-DNDEBUG
LDFLAGS=-O2-Wl,-no_compact_unwind-DNDEBUG-lm-pthread
编译器=gcc${OPTFLAG}
链接器=gcc${LDFLAGS}
#CPLEX目录
CPLEX_HOME=/opt/ibm/ILOG/CPLEX_Studio1263/CPLEX
CPLEX_INC=${CPLEX_HOME}/include/
CPLEX_LIB=${CPLEX_HOME}/LIB/x86-64_linux/static_pic/-lcplex
#编译主文件
代码:code.c
${COMPILER}-c code.c-o code.o-I${CPLEX_INC}
${LINKER}-o code code.o-L${CPLEX_LIB}
清洁::
rm-f*.o
rm-f${LIB}/*.o
rm-f*~
rm-f${SRC}/*~${INCLUDE}/*~

您需要从源代码重建使用libgmp.so.3的任何程序或库。能否提供
make
运行的确切命令及其产生的错误消息


编辑这里的问题是系统安装了IBM CPLEX软件的一个版本,该版本带有自己的GCC二进制文件,而GCC二进制文件使用的是
libgmp.so.3
。解决此问题的最简单方法是将CPLEX软件升级到支持所用操作系统的版本,或在编写该软件的操作系统上使用该软件(即,实际提供的非常旧的
libgmp.so.3
).

您需要从源代码重建使用libgmp.so.3的任何程序或库。能否提供
make
运行的确切命令及其产生的错误消息


编辑这里的问题是系统安装了IBM CPLEX软件的一个版本,该版本带有自己的GCC二进制文件,而GCC二进制文件使用的是
libgmp.so.3
。解决此问题的最简单方法是将CPLEX软件升级到支持所用操作系统的版本,或在编写该软件的操作系统上使用该软件(即,实际装运
libgmp.so.3
)。

安装
libgmp dev
软件包的最简单方法,从linux发行版下载。GMP是一个包库,用于对大整数进行多精度计算,这可能是您的程序所需要的。正如您在一些评论中所说,添加
-L/usr/lib64/libgmp.so.10
是一个错误,因为
-L
选项允许添加一个目录来搜索库,而不是特定的库

如果只需要库,并且编译中没有缺少头文件(这很奇怪,但有时会发生),那么您仍然可以只链接
libgmp.so.10
对象,但您必须以一种令人讨厌的方式进行。只需将
/usr/lib64/libgmp.so.10
作为对象文件(不是库,带有
-l
选项)添加到link命令中

编辑 通过更仔细地查看您的
Makefile
我看不到对
libgmp.so.3
库的引用,因此我只能假设这是来自包外部的其他已编译库的间接引用。只用

ldd lib<nameOfLibrary>.so.x.x
然后找到
all_libs.lddout
查看哪个库使用
libgmp.so.3
(这将是过时的库),您需要卸载或升级它才能继续

Linux系统有一个库版本系统,允许可执行文件加载同一库的不同版本,并允许它们在同一系统中共存。两种选择之一:或者您可以找到共享
libgmp.so.3
库的版本3的源并将其安装到您的系统上,或者您需要更新程序使用的库,以便能够链接到系统上已经安装的
libgmp.so.10

第二版 正如我在评论中看到的,您已经通过另一个可能来自其他linux发行版的编译器更改了系统上的默认编译器(因为您安装的库是
libgmp.so.10
,而
cc1
请求的库是
libgmp.so.3
,它没有安装在您的系统上

安装与已安装的编译器不同的编译器,并且在不卸载其他编译器的情况下执行此操作,可能会导致此类问题


您可以做的最可靠的事情是从您的发行版重新安装编译器,或者更好的做法是重新安装整个linux系统,因为您可能已经破坏了在使用您的系统时将出现的许多东西。关于您所做的事情,对于进一步解决您的问题,有非常糟糕的信息。无论如何,我建议不要使用comment部件要添加有关您的问题的新信息,只需编辑您的问题并将所有这些新信息添加到其中。

从linux发行版安装
libgmp dev
软件包最简单的方法。GMP是一个软件包库,用于对您的程序可能需要的大整数进行多精度计算。当您添加一些注释,添加
-L/usr/lib64/libgmp.so.10
是一个错误,因为
-L
选项允许添加一个目录来搜索库,而不是特定的库

如果只需要库,并且编译中没有缺少头文件(这很奇怪,但有时会发生),那么您仍然可以只链接
libgmp.so.10
对象,但您必须以一种令人讨厌的方式进行链接。只需将
/usr/lib64/libgmp.so.10
添加为对象文件即可(不是库,带有
-l
选项)到您的链接命令
find / -name "lib*.so.*" -print | xargs ldd > all_libs.lddout