我正在編譯一些源代碼,這些源代碼需要我已經構建的其他項目中的一些dylib。我越來越如何在shell中編譯在macOS Sierra上使用dylib路徑的源碼
LD:符號(S)未找到架構x86_64`
每當我執行
g++ some_code.cpp -I/usr/local/include -o executable_binary
我知道g++
無法找到編譯dylibs(安裝在/usr/local/include
),因爲該錯誤還提到了很多特定的符號是dylib的一部分。
我已經嘗試過這樣的:
- 執行
install_name_tool -id "@/usr/local/lib/requiredlib.dylib" /usr/local/lib/requiredlib.dylib
- 添加
-L/usr/local/lib
的編譯選項。 - 將所有的dylib路徑顯式添加到編譯選項中。
- 嘗試添加
DYLD_LIBRARY_PATH
失敗,因爲Sierra出於安全原因不允許設置該變量。
我知道它可能會添加DYLD_LIBRARY_PATH
但需要禁用SIP。我可以做到這一點,我不想如果有更乾淨的方式來做到這一點。
P.S .:我想編譯Tulip graph library的教程示例。
缺失的符號與我已經安裝的圖庫有關。該錯誤信息是:
Undefined symbols for architecture x86_64:
"tlp::saveGraph(tlp::Graph*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, tlp::PluginProgress*)", referenced from:
_main in tutorial001-02ee7e.o
"operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, tlp::Graph const*)", referenced from:
_main in tutorial001-02ee7e.o
ld: symbol(s) not found for architecture x86_64
每當我做ls /usr/local/lib/requiredlib.dylib
所有從鬱金香的編譯庫的存在。
g++ -v
生產:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.1.0 (clang-802.0.42)
Target: x86_64-apple-darwin16.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
做ls /usr/local/include/tulip/
後,我得到我打算用圖書館的*.h
文件列表。
你不知道你錯過了什麼符號,你正在運行什麼樣的g ++變體等等。當然你編譯的庫不會安裝在'/ usr/local/include'中。 – pvg
編輯你的問題以添加這些細節。 – pvg
要獲得失敗鏈接的幫助,您需要至少發佈失敗的 鏈接命令行及其輸出* verbatim *。粗略的報告 你所做的事情太模糊,無法讓我們超越猜測。 –