当我尝试编译测试控制台应用程序以测试同一工作区上的静态库的某些功能时,我在二进制文件的链接阶段遇到问题,只有在我选择使用libc ++标准库时才会发生。 / p>
缺少的符号错误如下:
Undefined symbols for architecture x86_64:
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::empty() const", referenced from:
libtorrent::torrent::replace_trackers(std::__1::vector<libtorrent::announce_entry, std::__1::allocator<libtorrent::announce_entry> > const&) in libLibOFFTorrent-xcode.a(torrent.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
当我在两个目标中选择stdlibc ++时,一切都编译正常,运行正常。
我的问题是:
注释:
UPDATE :当我在静态lib项目中删除对string :: empty的引用时,依赖于使用libc ++编译并运行的项目,但它会进入无限循环。
UPDATE 2 :删除string :: empty引用当我使用libstdc ++编译整个文件时没有任何效果它运行正常。没有循环,这让我觉得这是一个错误或类似的东西。
更新3 :编译时,这是程序无限循环的地方:
答案 0 :(得分:1)
似乎您的某个依赖项(libtorrent
)已针对libstdc++
构建。
检查命名空间:std::__1::basic_string
。它具有__1
前缀,通常表示libstdc++
)。
我可能错了,但如果你绝对想要使用这个,我认为你需要重建libtorrent
libc++
。
请注意,使用stdlibc++
。
答案 1 :(得分:0)
您是否有机会使用-D_LIBCPP_INLINE_VISIBILITY =“”编译libtorrent?
我问的原因是std::string::empty()
不在libc ++。dylib中,因为它标有“always_inline”。因此,当它被使用时,它本应被内联到libtorrent中。