Как включить библиотеку C ++ после того, как я ее "сделаю"? - PullRequest
0 голосов
/ 26 апреля 2020

Я следовал инструкциям для сборки arrow, что составляет

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

, поэтому теперь я хочу использовать созданные мной библиотеки

main. 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"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~

, так как мне сказать g cc использовать только что созданную библиотеку?

1 Ответ

1 голос
/ 26 апреля 2020

Шаг 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, что странно, поскольку <install_path>/lib явно содержит файл libparquet.so.18!

Проблема в том, что загрузчик динамического c не может найти библиотеку динамического c. Он не знает, что <install_path>/lib также должен быть проверен, и нуждается в вашей помощи:

  • добавьте <install_path>/lib в LD_LIBRARY_PATH:
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<install_path>/lib
    
  • или путь библиотеки жестких кодов в исполняемый файл (не очень хорошая идея) с rpath путем добавления -Wl,-rpath=<install_path>/lib к g++ опциям.
...