我已经查看了有关此主题的其他类似问题,我认为还有一些特定于OSX的问题。
我试图将Basho的LevelDB分支静态链接到我的C应用程序(因为LevelDB的打包版本将使用Google的主线)。即使使用c ++链接器并将-lc ++添加到命令行,我仍然会遇到有关缺少c ++ STL符号的错误,例如:
" std :: string :: _ Rep :: _ M_destroy(std :: allocator const&)", 引自: libleveldb.a中的_leveldb_open(c.o)
奇怪的是,我知道我已经启用了C ++位,因为我还链接到libsnappy,在我添加链接指令之前,还有未解决的libsnappy符号(显然)现在被清除了。 / p>
据我所知,我有最新版本的xcode&编译器链的其余部分。 libleveldb也使用与常规应用程序相同的工具链进行编译。这是我尝试的命令行:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -g -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles / get_rid_status.dir / get_rid_status.c.o -o get_rid_status /usr/local/lib/libdb.a /usr/lib/libssl.dylib /usr/lib/libcrypto.dylib /usr/lib/libaprutil-1.dylib /usr/lib/libapr-1.dylib -lpthread -ldl -lm -lz leveldb / libleveldb.a /usr/local/lib/libsnappy.dylib -lc ++
我与c ++链接器链接并使用-lc ++添加c ++标准库无济于事。
更新 找到了正确的答案,可以在下面找到。感谢那些在我最初回答我自己的问题时告诉我正确礼仪的用户。
答案 0 :(得分:0)
事实证明,leveldb添加了一些我最初没有注意到的额外链接器标志。罪魁祸首是-mmacosx-version-min=10.8
。将该标志添加到我的C应用程序的链接步骤中,所有内容都排成一行。