【问题标题】:How to include a C++ library after I `make` it?在我“制作”之后如何包含一个 C++ 库?
【发布时间】:2020-08-09 22:42:17
【问题描述】:

我关注的是instructions to build arrow

git clone https://github.com/apache/arrow.git
cd arrow/cpp
mkdir release
cd release
cmake ..
make

所以现在我想利用我已经构建的库

ma​​in.cpp

#include "parquet/arrow/writer.h"

void main(int argc, char *argv[]) {
    printf("ok")
}

但它抱怨

In file included from /home/xiaodai/git/arrow/cpp/src/parquet/arrow/writer.h:24:0,
                 from main.cpp:1:
/home/xiaodai/git/arrow/cpp/src/parquet/properties.h:30:10: fatal error: parquet/parquet_version.h: No such file or directory
 #include "parquet/parquet_version.h"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~

那么我如何告诉 gcc 使用我刚刚构建的库?

【问题讨论】:

  • 如果是分布式库,您必须适当地安装它
  • @Swift-FridayPie 非常感谢您的提示。

标签: c++ gcc


【解决方案1】:

步骤 1. 安装

git clone https://github.com/apache/arrow.git
cd arrow/cpp
mkdir release
cd release
cmake .. -DCMAKE_INSTALL_PREFIX=<install_path> -DARROW_PARQUET=ON
make
make install

步骤 2. 编译和链接

g++ main.cpp -I<install_path>/include -L<install_path>/lib -lparquet -larrow -o main

main.cpp 应该在你尝试编译之前修复(void main,缺少;)。

编译成功后,我运行./main 并得到./main: error while loading shared libraries: libparquet.so.18: cannot open shared object file: No such file or directory,这很奇怪,因为&lt;install_path&gt;/lib 显然有文件libparquet.so.18

问题是动态加载器找不到动态库。它不知道&lt;install_path&gt;/lib 也应该被检查,需要你的帮助:

  • &lt;install_path&gt;/lib 添加到LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<install_path>/lib
    
  • 或通过将-Wl,-rpath=&lt;install_path&gt;/lib 添加到g++ 选项,使用rpath 将库路径硬编码到可执行文件中(通常不是一个好主意)。

【讨论】:

  • 您能解释一下 -DCMAKE_INSTALL_PREFIX= 的用途吗?
  • @xiaodai,设置运行make install时将库文件复制到的路径。
  • 编译成功后,我运行./main 并得到./main: error while loading shared libraries: libparquet.so.18: cannot open shared object file: No such file or directoryldd ./main 返回libparquet.so.18 =&gt; not found 这很奇怪,因为&lt;install_path&gt;/lib 显然有文件libparquet.so.18!有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2021-12-07
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
相关资源
最近更新 更多