2016-03-08 63 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)不是用它構建的。