在add_library的链接阶段结束时添加-ldl

AC.*_*AC. 4 c ubuntu cmake shared-libraries

我在使用cmake构建的github https://github.com/acgreek/ExtremeCUnit上编写/维护了一个小单元测试库.退房后,您可以通过'cmake test'结账并运行一些测试.它在Cygwin和Ubuntu(我唯一的家庭系统)上运行得很好.我最近升级到ubuntu 13.10并且库停止了与测试二进制文件的链接,因为ExtremeUnitC库现在需要在链接阶段(通过add_library)与-ldl链接,另外-ldl需要添加到链接的末尾行(似乎有些改为gcc).在Ubuntu的早期版本中,在测试对象与ExtremeUnitC库链接之前,add_library目标不需要-ldl

基本上我需要的是make VERBOSE = 10的结果,当它进入下一阶段时

Linking C shared library libExtremeCUnit.so
/usr/bin/cmake -E cmake_link_script CMakeFiles/ExtremeCUnit.dir/link.txt --verbose=10
/usr/bin/gcc  -fPIC -Wall -Wextra -ggdb3 -fPIC  -ldl   -shared -Wl,-    soname,libExtremeCUnit.so -o libExtremeCUnit.so CMakeFiles/ExtremeCUnit.dir/main.c.o CMakeFiles/ExtremeCUnit.dir/runner.c.o CMakeFiles/ExtremeCUnit.dir/util.c.o CMakeFiles/ExtremeCUnit.dir/findtest_names.c.o CMakeFiles/ExtremeCUnit.dir/assert_support.c.o 
Run Code Online (Sandbox Code Playgroud)

我需要它,

Linking C shared library libExtremeCUnit.so
/usr/bin/cmake -E cmake_link_script CMakeFiles/ExtremeCUnit.dir/link.txt --verbose=10
/usr/bin/gcc  -fPIC -Wall -Wextra -ggdb3 -fPIC  -ldl   -shared -Wl,-    soname,libExtremeCUnit.so -o libExtremeCUnit.so CMakeFiles/ExtremeCUnit.dir/main.c.o CMakeFiles/ExtremeCUnit.dir/runner.c.o CMakeFiles/ExtremeCUnit.dir/util.c.o CMakeFiles/ExtremeCUnit.dir/findtest_names.c.o CMakeFiles/ExtremeCUnit.dir/assert_support.c.o -ldl
Run Code Online (Sandbox Code Playgroud)

我应该如何以干净/可移植的方式编辑我的CMakeList.txt?

您也可以向我发送拉取请求,以便您可以获得修复它的功劳.

AC.*_*AC. 9

我只需要添加

target_link_libraries(ExtremeCUnit dl)
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用$ {CMAKE_DL_LIBS} (3认同)

mch*_*son 7

if(CMAKE_DL_LIBS)
    target_link_libraries(ExtremeCUnit ${CMAKE_DL_LIBS})
endif()
Run Code Online (Sandbox Code Playgroud)