簡體   English   中英

如何在OSX中將C ++庫靜態鏈接到C應用程序?

[英]How can I statically link a C++ library to a C application in OSX?

我已經瀏覽了有關此主題的其他類似問題,並且我認為我缺少某些特定於OSX的東西。

我正在嘗試將Basho的LevelDB的fork靜態鏈接到我的C應用程序(因為LevelDB的打包版本將使用Google的主線)。 即使使用c ++鏈接器並將-lc ++添加到命令行中,我仍然會充滿關於缺少c ++ STL符號的錯誤,例如:

“ std :: string :: _ Rep :: _ M_destroy(std :: allocator const&)”,引用自:libleveldb.a(co)中的_leveldb_open

奇怪的是,我知道我正確啟用了C ++位,因為我還鏈接到libsnappy,在添加link指令之前,有(現在)已清除的未解決的libsnappy符號(顯然)。

據我所知,我擁有最新版本的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.co -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 ++標准庫,但無濟於事。

更新找到正確的答案,可以在下面找到。 當我最初在這里回答我自己的問題時,那些告訴我正確禮節的用戶感到很榮幸。

事實證明,leveldb添加了一些我最初沒有注意到的額外鏈接器標志。 罪魁禍首是-mmacosx-version-min=10.8 在我的C應用程序的鏈接步驟中添加該標志可以使所有內容對齊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM