【发布时间】:2019-02-16 14:41:12
【问题描述】:
我有一个创建共享库的 cmake 项目,该库又引用其他库:openssl、zlib、libevent 和 libevhtp。我的项目在 linux 上编译/链接正常(它创建共享库,以及链接到我的库(测试用例)的可执行文件)。
但是,在 macOS 上,链接库时我得到未定义的引用:
[ 54%] Linking CXX shared library libmylib.dylib
Undefined symbols for architecture x86_64:
"_RAND_bytes", referenced from:
mylib::randomStringHex(int) in util.cc.o
"_SSL_get_ex_data", referenced from:
(...more errors)
现在如果我添加这个:
target_link_libraries(mylib PUBLIC ${EXTERNAL_LIBS})
(EXTERNAL_LIBS 包含所有外部引用的库)它将成功构建共享库,我可以使用它/链接到它,一切正常。
但是我不能保留这个选项,因为在 linux 上我不能将我的库链接到 libevhtp,因为这个库不是用 -fPIC 编译的。
所以问题是,在 macOS 上创建的库总是链接到外部库是否正常,或者如何避免这种情况?就目前而言,我可以在 linux 或 macOS 上成功构建,但不能同时在两个平台上构建。
【问题讨论】:
标签: c++ macos cmake linker shared-libraries