2012-11-06 225 views
1

我完全是cmake的新手。一个svn更新后(也binutils的,我怀疑这是造成这个问题),我得到一个错误(我成功地编译和之前所使用的程序)CMAKE DSO链接

Linking CXX executable gmsh 
/usr/bin/ld: /usr/local/lib/liblapack.a(dgesvd.o): undefined reference to symbol '[email protected]@GFORTRAN_1.0' 
/usr/bin/ld: note: '[email protected]@GFORTRAN_1.0' is defined in DSO /usr/lib/libgfortran.so.3 so try adding it to the linker command line 
/usr/lib/libgfortran.so.3: could not read symbols: Invalid operation 
collect2: error: ld returned 1 exit status 
make[2]: *** [gmsh] Error 1 
make[1]: *** [CMakeFiles/gmsh.dir/all] Error 2 
make: *** [all] Error 2 

也许这是与此相关的Fedoraproject DSO Change

我有一个最新的archlinux(binutils-2.23-1)。

我试着编辑ccmake .菜单中的行。点击[c]后,原始选项将被恢复(所以我不能将/usr/lib/libgfortran.so.3添加到GMSH_EXTERNAL_LIBRARIES变量中,以便按照新的Makefiles的顺序[g] generate)。

我也试过在cmake irc chat中加入一些推荐的选项,但最终没有奏效。

cmake . -DCMAKE_LINK_FLAGS=-Wl,--add-needed 

cmake . -DCMAKE_LINK_FLAGS=-lgfortran 

在相同的误差引起。我能做什么?

其他信息:make VERBOSE=1pastebin link

+0

你试过'cmake。 -DCMAKE_LINK_LIBRARY_FLAG = gfortran'? – Fraser

+0

@Fraser我刚刚尝试过,但它产生完全相同的错误。我想我所需要做的就是在'ld'调用中加入'-lgfortran'。 – Sebastian

+0

这通常可以通过在适当的CMakeLists中向['target_link_libraries'](http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:target_link_libraries)调用添加'gfortran'来实现.txt – Fraser

回答

4

要将库添加到链接命令,你可以使用target_link_libraries。显然在这种情况下,你想:

target_link_libraries(gmsh ${LINK_LIBRARIES} gfortran)