[英]Handling “dyld: lazy symbol binding failed: Symbol not found” error when compiling C++ code on Mac
[英]Lazy symbol binding failed when linking C++ dynamic library
我正在用C ++編寫一個dylib,但是當我嘗試將它鏈接到我的應用程序時,它會給我一個執行錯誤:
dyld: lazy symbol binding failed: Symbol not found: __ZN8Vector2DC1Ev
Referenced from: /Users/noahz/Desktop/Singularity/Singularity Test App/build/Debug/Singularity Test App
Expected in: /Users/noahz/Desktop/Singularity/Singularity Test App/build/Debug/libSingularity.dylib
dyld: Symbol not found: __ZN8Vector2DC1Ev
Referenced from: /Users/noahz/Desktop/Singularity/Singularity Test App/build/Debug/Singularity Test App
Expected in: /Users/noahz/Desktop/Singularity/Singularity Test App/build/Debug/libSingularity.dylib
我確保符號沒有剝離,並且
nm -g libSingularity.dylib | grep "T" | grep __ZN8Vector
報告該符號存在於庫中:
0000000000006df6 T __ZN8Vector2DC1Eff
0000000000006d98 T __ZN8Vector2DC1Ev
0000000000006dc2 T __ZN8Vector2DC2Eff
0000000000006d6e T __ZN8Vector2DC2Ev
我從XCode內部鏈接,所以鏈接命令有點奇怪。 這是dylib的鏈接器命令:
Ld "/Users/noahz/Desktop/Singularity/Singularity Engine/build/Debug
/libSingularity.dylib" normal x86_64
cd "/Users/noahz/Desktop/Singularity/Singularity Engine"
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Developer/usr/bin/g++-4.2 -arch x86_64 -dynamiclib -isysroot /Develope
/SDKs/MacOSX10.6.sdk "-L/Users/noahz/Desktop/Singularity/Singularity Engine/build
/Debug" "-F/Users/noahz/Desktop/Singularity/Singularity Engine/build/Debug"
-filelist "/Users/noahz/Desktop/Singularity/Singularity Engine/build/Singularity
Engine.build/Debug/Singularity Engine.build/Objects-normal/x86_64
/libSingularity.LinkFileList" -install_name libSingularity.dylib -mmacosx-version-
min=10.6 -framework sfml-system-d -framework sfml-window-d -framework SFML
-framework OpenGL -framework OpenAL -framework sfml-graphics-d -single_module
-compatibility_version 1 -current_version 1 -o "/Users/noahz/Desktop/Singularity
/Singularity Engine/build/Debug/libSingularity.dylib"
這是測試應用程序的鏈接器命令:
cd "/Users/noahz/Desktop/Singularity/Singularity Test App"
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Developer/usr/bin/g++-4.2 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk
"-L/Users/noahz/Desktop/Singularity/Singularity Test App/build/Debug" "-F/Users
/noahz/Desktop/Singularity/Singularity Test App/build/Debug" -filelist "/Users/noahz
/Desktop/Singularity/Singularity Test App/build/Singularity Test App.build/Debug
/Singularity Test App.build/Objects-normal/x86_64/Singularity Test
App.LinkFileList" -mmacosx-version-min=10.6 "/Users/noahz/Desktop/Singularity
/Singularity Engine/build/Debug/libSingularity.dylib" -o "/Users/noahz/Desktop
/Singularity/Singularity Test App/build/Debug/Singularity Test App"
關於為什么會發生這種情況和/或如何修復它的任何想法?
如果您的應用程序在架構x86 / 64上與您嘗試加載的庫不同,那么這可能會解釋您遇到的問題。
兩者都必須使用相同的架構進行編譯。
我沒有在鏈接階段看到一行
-lSingularity
顯然,加載動態庫的另一種方法是明確地從代碼中加載它。
gSystem->Load("libSingularity");
我只是在解釋我發現的博客文章。
http://root.cern.ch/phpBB3//viewtopic.php?f=3&t=10380&start=0
我通過靜態鏈接庫來解決問題。 它並不像動態鏈接那么優雅,但至少它不會反復崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.