3

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"

なぜこれが起こっているのか、および/またはそれを修正する方法についてのアイデアはありますか?

4

3 に答える 3

0

リンクステージに線が表示されません

-lSingularity

明らかにダイナミックライブラリをロードする別の方法は、コード内から明示的にロードすることです。

gSystem->Load("libSingularity");

見つけたブログ記事を言い換えているだけです。

http://root.cern.ch/phpBB3//viewtopic.php?f=3&t=10380&start=0

于 2010-07-29T16:18:13.373 に答える
0

アプリケーションのアーキテクチャx86/64が、ロードしようとしているライブラリと異なる場合は、問題が発生している可能性があります。

両方とも同じアーキテクチャでコンパイルする必要があります。

于 2010-07-29T03:46:40.137 に答える
0

ライブラリを静的にリンクすることで問題を解決しました。ダイナミックリンクほどエレガントではありませんが、少なくとも繰り返しクラッシュすることはありません。

于 2010-07-30T07:28:31.237 に答える