【问题标题】:Error compiling SOSlib C library编译 SOSlib C 库时出错
【发布时间】:2016-03-08 18:24:44
【问题描述】:

我正在尝试编译一个库,

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

这里发生了什么?

【问题讨论】:

  • 如果查看compilelink选项,编译中没有-fPIC选项,但链接包含-fPIC .当某些源文件使用-fPIC 编译而其他源文件不使用(gcc 使用从字节码文件中读取的最后一个值)时,它取决于多个文件的链接的行为方式。因此,请确保使用相同的 -fPIC 选项编译所有源代码。您的错误提示解决方案“relocation R_X86_64_32 against '.rodata' can not be used when making a shared object; recompile with -fPIC

标签: linux compiler-errors ode


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多