C++ 链接 boost 库

标签 c++ boost linker

  1. 首先,我通过转至 /usr/local/boost_1_49_0/ 构建了需要构建的 Boost 库并运行 bootstrap.sh .一切顺利。
  2. 第 (1) 步创建了所有 .so.a /usr/local/boost_1_49_0/stage/lib 中的文件
  3. 我测试了与库的链接,比如 lboost_regex#include <boost/regex>在我的源代码中。这也顺利。
  4. 最后在 asio 上尝试了这个例子,我尝试了:

    g++ -I/usr/local/boost_1_49_0 MAIN.cpp -o MAIN -L/usr/local/boost_1_49_0/stage/lib -lboost_thread -lboost_system -lpthread
    

(4) 编译好了。但是当我用 ./MAIN 运行程序时,我收到以下错误:

./MAIN: error while loading shared libraries: libboost_system.so.1.49.0: cannot open shared object file: No such file or directory 

最佳答案

-L 选项仅设置编译时 库搜索路径;如果您希望在运行时找到共享库,则必须在运行时知道其目录。

g++ 设置它的一种方法是通过编译器将 -rpath 传递给链接器;在您的情况下,您可以说 -Wl,-rpath -Wl,/usr/local/boost_1_49_0/stage/lib。 (这会将目录嵌入到可执行文件中。)

另一种方法是将库安装在链接器默认搜索的位置(例如 /usr/local/lib 可能是这样的地方,具体取决于系统的配置方式)。

另一种方法是设置一个环境变量,例如 LD_LIBRARY_PATH(Linux 或 Solaris)或 DYLD_LIBRARY_PATH(Mac OS X),告诉链接器什么时候搜索哪里从设置变量的 shell 启动可执行文件。

关于C++ 链接 boost 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11372340/

相关文章:

c++ - 在 Windows 中更改 boost 线程优先级

-ledit 的链接器问题 (Ubuntu 14.10)

c++ - 我正在尝试在 Eclipse 中构建单个 C++ 项目,但即使在使用 mingw 路径设置路径变量后也会出现构建错误

c++ - 将字符串的大写字母转换为小写字母,反之亦然

c++ - boost:如何监控互斥体的状态并在死锁时强制释放 [2]

drupal - drupal 的最佳缓存器是什么(Boost、xcache 或 varnish)?

c++ - 在 CMAKE 上链接和添加可执行文件?

c++ - 混合 C/C++ 源,无法识别链接上的 'extern' 变量

c++ - 如何为 editline 应用程序的提示着色

c++ - 列表中的最大数字