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

如果您的应用程序在 x86/64 架构上与您尝试加载的库不同,这可能解释了您遇到的问题。

两者都必须使用相同的架构进行编译。

于 2010-07-29T03:46:40.137 回答
0

我通过静态链接库解决了这个问题。它不像动态链接那样优雅,但至少它不会反复崩溃。

于 2010-07-30T07:28:31.237 回答
0

我在您的链接阶段没有看到一行

-lSingularity

显然,加载动态库的另一种方法是从代码中显式加载它。

gSystem->Load("libSingularity");

我只是在解释我发现的一篇博客文章。

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

于 2010-07-29T16:18:13.373 回答