如何在OSX中将C ++库静态链接到C应用程序?

时间:2015-03-20 19:13:59

标签: c++ c macos static-linking leveldb

我已经查看了有关此主题的其他类似问题,我认为还有一些特定于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 ++标准库无济于事。

更新 找到了正确的答案,可以在下面找到。感谢那些在我最初回答我自己的问题时告诉我正确礼仪的用户。

1 个答案:

答案 0 :(得分:0)

事实证明,leveldb添加了一些我最初没有注意到的额外链接器标志。罪魁祸首是-mmacosx-version-min=10.8。将该标志添加到我的C应用程序的链接步骤中,所有内容都排成一行。