2016-03-08 92 views
1

我试图编译库,错误编译SOSlib C库

http://www.tbi.univie.ac.at/~raim/odeSolver/

这一个特别,我已经得到了这个必要的库。

但是,无论何时我尝试使用“make”进行编译,我都会收到以下错误消息。

Making all in src 
make[1]: Entering directory `/home/user/SOSLib/buildSOSlib/src' 
/usr/bin/make all-am 
make[2]: Entering directory `/home/user/SOSLib/buildSOSlib/src' 
/bin/bash ../libtool --tag=CC --mode=link /usr/bin/gcc-4.8 -Wno-unknown-pragmas -Wall -Wextra -ansi -std=iso9899:1990 -g3 -gdwarf-2 -no-undefined -L/usr/lib64 -L/usr/local/lib -o libODES.la -rpath /usr/local/lib ASTIndexNameNode.lo arithmeticCompiler.lo charBuffer.lo compiler.lo cvodeData.lo cvodeSolver.lo daeSolver.lo drawGraph.lo evaluateAST.lo integratorInstance.lo integratorSettings.lo interpol.lo modelSimplify.lo nullSolver.lo odeConstruct.lo odeModel.lo odeSolver.lo processAST.lo sbml.lo sbmlResults.lo sensSolver.lo solverError.lo util.lo data.lo error.lo -lsbml -lxml2 -lsundials_ida -lsundials_kinsol -lsundials_cvodes -lsundials_nvecserial -lm -lm -ldl 
libtool: link: /usr/bin/gcc-4.8 -shared -fPIC -DPIC .libs/ASTIndexNameNode.o .libs/arithmeticCompiler.o .libs/charBuffer.o .libs/compiler.o .libs/cvodeData.o .libs/cvodeSolver.o .libs/daeSolver.o .libs/drawGraph.o .libs/evaluateAST.o .libs/integratorInstance.o .libs/integratorSettings.o .libs/interpol.o .libs/modelSimplify.o .libs/nullSolver.o .libs/odeConstruct.o .libs/odeModel.o .libs/odeSolver.o .libs/processAST.o .libs/sbml.o .libs/sbmlResults.o .libs/sensSolver.o .libs/solverError.o .libs/util.o .libs/data.o .libs/error.o -L/usr/lib64 -L/usr/local/lib -lsbml -lxml2 /usr/local/lib/libsundials_ida.a /usr/local/lib/libsundials_kinsol.a /usr/local/lib/libsundials_cvodes.a /usr/local/lib/libsundials_nvecserial.a -lm -ldl -Wl,-soname -Wl,libODES.so.0 -o .libs/libODES.so.0.0.0 
/usr/bin/ld: /usr/local/lib/libsundials_ida.a(ida.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/libsundials_ida.a: error adding symbols: Bad value 
collect2: error: ld returned 1 exit status 
make[2]: *** [libODES.la] Error 1 
make[2]: Leaving directory `/home/user/SOSLib/buildSOSlib/src' 
make[1]: *** [all] Error 2 
make[1]: Leaving directory `/home/user/SOSLib/buildSOSlib/src' 
make: *** [all-recursive] Error 1 

这里发生了什么?

+0

如果您查看* compile *和* link *选项,编译时没有'-fPIC'选项,但链接包含'-fPIC'。编译器依赖于当用'-fPIC'编译某些源文件时没有('gcc'使用从字节码文件读取的最后一个值)编译多个文件的链接时的行为。因此,请确保所有源代码都使用相同的“-fPIC”选项进行编译。您的错误提示解决方案“*重新定位R_X86_64_32与'.rodata'无法在共享对象时使用; *'使用-fPIC重新编译” –

回答

0

您正在尝试构建共享库,并且共享库必须构建为位置无关代码,以便它们可以在内存中的任何位置加载和运行。这是通过将-fPIC标志传递给GCC来实现的。似乎其中一个库(libsundials_ida.a)不是用它构建的。