2011-03-24 106 views
0

我一直在拉我的头发,试图找出如何用boost regex编译我的应用程序。c/C++ boost - 编译问题

我已经安装了提升,从源头在CentOS 5

g++ -lboost_regex -o my_app my_app.c $(mysql_config --libs --cflags) 

它编译没有任何错误,但是当我执行它:

error while loading shared libraries: libboost_regex.so.1.46.1: cannot open shared object file: No such file or directory 

该文件的位置是:

/usr/local/lib/libboost_regex.so.1.46.1 

任何人都会遇到同样的问题?

+1

鉴于这是关于Boost,为什么C标签和问题标题中的“C/C++”?不应该这是直C++? – 2011-03-24 16:43:48

回答

3

您是否尝试过LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH your_program以确定它知道在哪里可以找到共享对象?当您使用-Wl,-R/usr/local/lib进行链接时,您可以设置路径。

编辑:更清楚的是,当你链接你的代码时,链接器会将RPATH和RUNPATH嵌入到二进制文件中。这些值告诉运行时加载程序在哪里查找所需的共享对象。

如果您将-Wl,-R/usr/local/lib添加到您的链接命令中,应该导致它嵌入该目录并在加载程序时始终检查它。

+0

工作!但是,是否有办法永久设置LD_LIBRARY_PATH,因此我不必在每次应用程序的路径之前调用它? – Joe 2011-03-24 15:47:36

+0

对不起,你最后一次错误,我是一个C++新手。我已经将-R/usr/local/lib添加到g ++编译命令中,但它给了我“g ++:无法识别的选项”-R'“ – Joe 2011-03-24 15:58:47

+0

@Joe你说的对,它是一个链接器选项,所以你必须通过它通过'-Wl',我确定了我的答案。 – 2011-03-24 16:10:46

0

试试这个。

$ LD_LIBRARY_PATH=/usr/local/lib:LD_LIBRARY_PATH
$ export LD_LIBRARY PATH

现在试着告诉我们发生了什么。