3

全部:

我已经在一个工作区(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 配置中。

预先感谢您的帮助。

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

你好.cpp

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

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

世界.cpp

#include "World.h"

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

世界.h

#include <string>

std::string getWorld();
4

1 回答 1

10
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_PATHDYLD_FALLBACK_LIBRARY_PATH放入Name盒中

libWorld.dylib4.将文件所在的路径放入Value框中

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

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

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 in .profile 文件

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

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

DYLD_LIBRARY_PATH和之间的区别DYLD_FALLBACK_LIBRARY_PATH请参考这篇文章

于 2014-09-17T18:12:49.487 回答