[CMake] Missing 'undefined dynamic_lookup' flag

Cedric Doucet cedric.doucet at inria.fr
Thu Mar 9 18:31:20 EST 2017


Actually, I should not modify CMAKE_CXX_COMPILER_FLAGS. 
It seems that the problem comes from the variable CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS which only contains ' -bundle -Wl,-headerpad_max_install_names' but not ' -undefined dynamic_lookup'. 

How to overcome this problem? 

----- Mail original -----

> De: "Cedric Doucet" <cedric.doucet at inria.fr>
> À: cmake at cmake.org
> Envoyé: Jeudi 9 Mars 2017 23:41:03
> Objet: Missing 'undefined dynamic_lookup' flag

> Hello,

> I am trying to find a portable way of generating modules with CMake.
> Here is a toy CMake script:

> -------------------------------

> CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

> PROJECT(dlopen_example CXX)

> ADD_EXECUTABLE(main main.cpp print_ref.cpp)
> TARGET_LINK_LIBRARIES(main dl)

> ADD_LIBRARY(module MODULE module.cpp)

> -------------------------------

> This script works fine with g++ on Linux Ubuntu.
> However, I get an error message with clang on Mac OSX:

> ----------------------------

> Undefined symbols for architecture x86_64:
> "print_ref()", referenced from:
> _module in module.cpp.o
> ld: symbol(s) not found for architecture x86_64
> clang: error: linker command failed with exit code 1 (use -v to see
> invocation)
> make[2]: *** [libmodule.so] Error 1
> make[1]: *** [CMakeFiles/module.dir/all] Error 2
> make: *** [all] Error 2

> ----------------------------

> I found a solution to this problem by adding the 'undefined dynamic_lookup'
> flag :

> SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -undefined dynamic_lookup")

> But, I am surprised that the MODULE option of ADD_LIBRARY does not handle
> such a flag.

> Is there a portable solution to this problem with CMake?

> Best regards,

> Cédric Doucet
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20170310/feb9e7a6/attachment.html>


More information about the CMake mailing list