作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 GCC 4.5.2
和 Boost 1.46.1
构建一个共享库(使用 --build-type=complete
编译>) 这是来自 Makefile 的命令,它执行链接部分:
$(CXX) -static -lboost_filesystem -fpic -shared $^ -o $@
一切都可以正常编译,但是当它被应用程序加载时出现以下错误:
plugins/crashdetect.so: undefined symbol: _ZN5boost11filesystem34path21wchar_t_codecvt_facetEv
ldd
输出:
linux-gate.so.1 => (0x002f8000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x00bf5000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x0032d000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00506000)
/lib/ld-linux.so.2 (0x006f6000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x00110000)
我相信这意味着它静态链接了 Boost。
这就是 nm crashdetect.so -u | grep boost
说:
U _ZN5boost11filesystem34path21wchar_t_codecvt_facetEv
U _ZN5boost11filesystem36detail13dir_itr_closeERPvS3_
U _ZN5boost11filesystem36detail28directory_iterator_constructERNS0_18directory_iteratorERKNS0_4pathEPNS_6system10error_codeE
U _ZN5boost11filesystem36detail28directory_iterator_incrementERNS0_18directory_iteratorEPNS_6system10error_codeE
U _ZN5boost11filesystem36detail6statusERKNS0_4pathEPNS_6system10error_codeE
U _ZN5boost6system15system_categoryEv
U _ZN5boost6system16generic_categoryEv
U _ZNK5boost11filesystem315directory_entry12m_get_statusEPNS_6system10error_codeE
所以我认为既然这个符号在这个列表中排在第一位,那么它很可能没有什么特别之处。
我错过了什么吗?
编辑:那么这是不可能的还是什么?
最佳答案
我相信:
您对 -static 和 -shared 的使用不正确。控制链接的唯一或多或少可靠的方法是:
-Wl,-Bstatic -lboost_filesystem -Wl,-Bshared
在命令行的末尾。
您无法链接到 boost_system。
失败的发生是因为您似乎实际上链接到了 boost_filesystem 的静态版本。然而,因为它是在任何目标文件之前在命令行上指定的,所以实际上没有从中提取任何符号,并且对 boost.filesystem 函数的每个引用都保持未定义。是的,链接器提示第一个 undefined symbol 。
关于c++ - 将 Boost.Filesystem 静态链接到共享库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398817/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!