Pat*_*cia 3 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]
Run Code Online (Sandbox Code Playgroud)
我已经遵循了所有指令,最终能够让它们编译而没有错误.但是,当我尝试运行Hello项目时,我收到以下错误:
dyld: Library not loaded: libWorld.dylib
Referenced from: /Users/pdl/Development/HelloWorld/Hello/Debug/Hello
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
我发布了以下代码.它非常简单,问题(我相信)是Eclipse配置中的某个地方.
预先感谢您的帮助.
-------------------------------------------- 源代码 ---- ------------------------------
HELLO.CPP
#include <stdio.h>
#include "World.h"
int main() {
printf("Hello %s\n", getWorld().c_str());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
World.cpp
#include "World.h"
std::string getWorld() { return "World"; }
Run Code Online (Sandbox Code Playgroud)
World.h
#include <string>
std::string getWorld();
Run Code Online (Sandbox Code Playgroud)
dyld: Library not loaded: libWorld.dylib
Referenced from: /Users/pdl/Development/HelloWorld/Hello/Debug/Hello
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
这意味着您的程序正在使用名为libWorld.dylib的动态库,尽管您在编译期间将动态库链接到您的程序.但是你必须告诉你的程序运行时dylib在哪里.
有两种解决方案:
解决方案1:为项目设置动态库环境变量in Eclipse:
1.右击你的project name,选择Run As->Run Configuration
2. Environment单击选项卡New
3.Put DYLD_LIBRARY_PATH或DYLD_FALLBACK_LIBRARY_PATHin Namebox
4.Put您的路径libWorld.dylib文件在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,所以你只需在.profile文件中添加:export DYLD_LIBRARY_PATH =/opt/local/lib/my_dylib:$ DYLD_LIBRARY_PATH
3.问题解决了,在这个解决方案中,你不必为所有的eclipse项目设置dylib路径
PS.DYLD_LIBRARY_PATH是一个环境变量,用于指定动态库的路径
DYLD_LIBRARY_PATH和之间的区别DYLD_FALLBACK_LIBRARY_PATH请参考这篇文章
| 归档时间: |
|
| 查看次数: |
4080 次 |
| 最近记录: |