Mac上的Eclipse dyld:未加载库:未找到图像

时间:2013-09-17 16:50:27

标签: c++ eclipse macos shared-libraries

所有

我已经在一个工作区(HelloWorld)中成功设置了两个项目(Hello和World)。这些是简单的项目,应该作为主项目和共享库项目一起工作。这是结构:

HelloWorld
    Hello
        src
            Hello.cpp
        Debug
            src
            Hello - [x86_64/le]
    World
        src
            World.cpp
            World.h
        Debug
            src
            libWorld.dylib - (x86_64/le]

我已经遵循了所有指令,最终能够让它们编译而没有错误。但是,当我尝试运行Hello项目时,我收到以下错误:

dyld: Library not loaded: libWorld.dylib
  Referenced from: /Users/pdl/Development/HelloWorld/Hello/Debug/Hello
  Reason: image not found

我发布了以下代码。它非常简单,问题(我相信)是Eclipse配置中的某个地方。

提前感谢您的帮助。

-------------------------------------------- 源代码 ----------------------------------

HELLO.CPP

#include <stdio.h>
#include "World.h"

int main() {
  printf("Hello %s\n", getWorld().c_str());
  return 0;
}

World.cpp

#include "World.h"

std::string getWorld() { return "World"; }

World.h

#include <string>

std::string getWorld();

1 个答案:

答案 0 :(得分:9)

dyld: Library not loaded: libWorld.dylib
Referenced from: /Users/pdl/Development/HelloWorld/Hello/Debug/Hello
Reason: image not found

这意味着您的程序正在使用名为libWorld.dylib的动态库,尽管您在编译期间将动态库链接到您的程序。但是你必须告诉你的程序运行时dylib在哪里。

有两种解决方案:

解决方案1:为项目in Eclipse设置动态库环境变量:

1.右键点击project name,选择Run As->Run Configuration

2.在Environment标签下单击New

3.在DYLD_LIBRARY_PATH框中输入DYLD_FALLBACK_LIBRARY_PATHName

4.输入libWorld.dylib文件位于Value

的路径

例如:       如果libWorld.dylib文件位于/opt/local/lib/my_dylib文件夹中,则将路径放在Name框中

解决方案2:在bash配置文件中设置DYLD_LIBRARY_PATH

1.通常在Mac OS中,配置文件在.profile文件夹下是~/,如果你没有这个文件而不是创建一个同名的新文件

2.编辑该文件:

  

.profile文件中添加以下内容:       export DYLD_LIBRARY_PATH=PATH_TO_YOUR_DYLIB:$DYLD_LIBRARY_PATH

     

在我的示例中,PATH_TO_YOUR_DYLIB为opt/local/lib/my_dylib,因此您只需添加:        export DYLD_LIBRARY_PATH = / opt / local / lib / my_dylib:$ DYLD_LIBRARY_PATH   在.profile文件

3.问题解决了,在这个解决方案中,你不必为所有的eclipse项目设置dylib路径

PS。 DYLD_LIBRARY_PATH是一个环境变量,用于指定动态库的路径

DYLD_LIBRARY_PATHDYLD_FALLBACK_LIBRARY_PATH之间的差异请参阅this帖子