2011-05-09 73 views
1

我正在编译源程序,它没有找到一些与它一起编译的动态库。这是我运行可执行文件时的输出。 (它编译罚款)与共享库有一些问题

dyld: Library not loaded: libipeqtcanvas.so.7.0.14 
    Referenced from: /Users/zrbecker/testipe/bin/./ipe 
    Reason: image not found 
Trace/BPT trap 

我的问题是,我知道-L发现库在编译,但我怎么保证运行时,该程序可以找到这些库。

这些库位于bin目录中的可执行文件的相对路径../lib中。

+0

编译过程创建一个可执行文件,其中包含有关库的所有信息。它在编译期间得到了很多。因此,如果您要在提到的路径中包含库的计算机上创建可执行文件,则一切都应该正常运行。但是,将该二进制文件运行并将其运行到其他地方(库不可用)可能是一个问题。 – Sriram 2011-05-09 10:29:32

+1

C或C++?选一个。实际上,这听起来与此无关。 – 2011-05-09 10:48:04

回答

2

您可以在运行时设置LD_LIBRARY_PATH(或实际上,因为您在OS X上,因此您需要DYLD_LIBRARY_PATH)以包含库目录。

export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/lib"

+0

真棒这个工程,但有没有办法在编译时处理它? – zrbecker 2011-05-09 10:39:40

+0

只是一个补充。我试图将所有内容都打包到应用程序包中,因此这些库将位于该包内,并可能会移动。 – zrbecker 2011-05-09 10:41:44

+0

我想你可以在路径中包含'@ executable_path'来引用可执行文件的运行时路径。 – James 2011-05-09 11:23:45