이것을 기반으로 BigARTM을 설치하려고 합니다.지도 시간센토스 7에서. 하지만 다음 오류가 발생합니다.
/bin/ld: cannot find -lboost_thread-mt
/bin/ld: cannot find -lboost_program_options-mt
/bin/ld: cannot find -lboost_date_time-mt
/bin/ld: cannot find -lboost_filesystem-mt
/bin/ld: cannot find -lboost_iostreams-mt
/bin/ld: cannot find -lboost_system-mt
/bin/ld: cannot find -lboost_chrono-mt
/bin/ld: cannot find -lboost_timer-mt
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libpthread.a(libpthread.o): In function 'sem_open':
(.text+0x6823): warning: the use of 'mktemp' is dangerous, better use 'mkstemp'
collect2: error: ld returned 1 exit status
make[2]: [bin/bigartm] Error 1
make[1]: [src/bigartm/CMakeFiles/bigartm.dir/all] Error 2
make: [all] Error 2
'Development Tools'
다음을 사용하여 설치 yum
하고 라이브러리를 찾았습니다./usr/lib64
rpm -ql boost-devel | grep '_program-\|_date_time-\|_thread-\|_filesystem-\|_iostreams-\|_system-\|_chrono-\|_timer-'
/usr/lib64/libboost_chrono-mt.so
/usr/lib64/libboost_date_time-mt.so
/usr/lib64/libboost_filesystem-mt.so
/usr/lib64/libboost_iostreams-mt.so
/usr/lib64/libboost_system-mt.so
/usr/lib64/libboost_thread-mt.so
/usr/lib64/libboost_timer-mt.so
Boost-Devel도 설치했습니다sudo yum install boost-devel
lib 의 경우 libboost_thread
다음 명령을 실행했습니다.
[oshri@analytics build]$ rpm -ql boost-devel | grep libboost_thread
/usr/lib64/libboost_thread-mt.so
/usr/lib64/libboost_thread.a
/usr/lib64/libboost_thread.so
[oshri@analytics build]$ locate thread | grep libboost_thread
/home/oshri/PycharmProjects/playground/libboost_thread-mt.so
/usr/lib/libboost_thread-mt.so
/usr/lib/libboost_thread.a
/usr/lib/libboost_thread.so
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libboost_thread-mt.so
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libboost_thread.a
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libboost_thread.so
/usr/lib64/libboost_thread-mt.so
/usr/lib64/libboost_thread-mt.so.1.53.0
/usr/lib64/libboost_thread.a
/usr/lib64/libboost_thread.so
/usr/lib64/libboost_thread.so.1.59.0
/usr/lib64 (copy)/libboost_thread-mt.so.1.53.0
[oshri@analytics build]$ locate -e thread | grep libboost_thread
/usr/lib/libboost_thread.a
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libboost_thread.a
/usr/lib64/libboost_thread-mt.so
/usr/lib64/libboost_thread-mt.so.1.53.0
/usr/lib64/libboost_thread.a
/usr/lib64/libboost_thread.so
/usr/lib64/libboost_thread.so.1.59.0
/usr/lib64 (copy)/libboost_thread-mt.so.1.53.0
저는 세 가지 방법을 시도했습니다.
- 에서
ln
까지의 링크를 만들고 에 추가 합니다 ./usr/lib64/libboost_<name>-mt.so
/usr/lib64/lboost_<name>-mt.so
/usr/lib64
LD_LIBRARY_PATH
/usr/lib64/libboost_<name>-mt.so
에서 까지의 링크를 만듭니다/usr/lib/lboost_<name>-mt.so
.LIBS = -L /usr/lib64
MakeFile에 추가합니다 .
예를 들어:
[oshri@analytics build]$ ls -l /usr/lib/\*program\*
lrwxrwxrwx 4 root root 37 Jan 19 17:38 /usr/lib/lboost_program_options-mt -> libboost_program_options-mt.so.1.53.0
lrwxrwxrwx 4 root root 37 Jan 19 17:38 /usr/lib/lboost_program_options-mt.so -> libboost_program_options-mt.so.1.53.0
[oshri@analytics build]$ ls -l /usr/lib64/\*program\*
lrwxrwxrwx 4 root root 37 Jan 19 17:38 /usr/lib64/lboost_program_options-mt.so -> libboost_program_options-mt.so.1.53.0
lrwxrwxrwx 4 root root 37 Jan 19 17:38 /usr/lib64/libboost_program_options-mt.so -> libboost_program_options-mt.so.1.53.0
-rwxr-xr-x 1 root root 468952 Nov 5 20:58 /usr/lib64/libboost_program_options-mt.so.1.53.0
lrwxrwxrwx 1 root root 34 Jan 19 17:38 /usr/lib64/libboost_program_options.so -> libboost_program_options.so.1.53.0
-rwxr-xr-x 1 root root 468944 Nov 5 20:58 /usr/lib64/libboost_program_options.so.1.53.0
[oshri@analytics build]$ printenv LD_LIBRARY_PATH
/home/oshri/PycharmProjects/EuroSalesOptimization/runtime/:/usr/lib64/
답변1
특별한 수정 없이 64비트 Centos7 virt에서(과거 Linux에서 빌드할 때 디렉터리에 문제가 있었기 때문에 아치에 대해 언급했습니다) lib
:lib64
# yum -y install git make cmake '@Development Tools' boost-devel
# git clone --branch=stable https://github.com/bigartm/bigartm.git
# cd bigartm
# mkdir build && cd build
# cmake ..
# make
... jeopardy music ...
글쎄, 빌드가 99% 완료될 때까지는 실패하지 않습니다. 자세한 빌드를 통해 정확한 명령을 찾을 수 있습니다(수평 스크롤 광기를 피하기 위해 일부 줄 바꿈을 수동으로 추가).
# make VERBOSE=1
...
/usr/bin/c++ -Wall -pthread -fPIC -std=c++11 -O3 -DNDEBUG
-static CMakeFiles/bigartm.dir/srcmain.cc.o
CMakeFiles/bigartm.dir/__/artm/cpp_interface.cc.o -o ../../bin/bigartm
-rdynamic ../../lib/libmessages_proto.a ../../lib/libartm-static.a
../../lib/libprotobuf.a ../../lib/libgoogle-glog.a -lboost_thread-mt
-lboost_program_options-mt -lboost_date_time-mt -lboost_filesystem-mt
-lboost_iostreams-mt -lboost_system-mt -lboost_chrono-mt -lboost_timer-mt
../../lib/libmessages_proto.a ../../lib/libinternals_proto.a ../../lib/libgflags.a
-lpthread
/usr/bin/ld: cannot find -lboost_thread-mt
/usr/bin/ld: cannot find -lboost_program_options-mt
/usr/bin/ld: cannot find -lboost_date_time-mt
/usr/bin/ld: cannot find -lboost_filesystem-mt
/usr/bin/ld: cannot find -lboost_iostreams-mt
/usr/bin/ld: cannot find -lboost_system-mt
/usr/bin/ld: cannot find -lboost_chrono-mt
/usr/bin/ld: cannot find -lboost_timer-mt
/usr/bin/ld: cannot find -lpthread
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lpthread
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
make[2]: *** [bin/bigartm] Error 1
C 라이브러리를 찾을 수 없습니다. 이제 문제가 발생합니다. 다음 관련 문제는 ld
찾고 있는 정확한 파일이 무엇인지 찾을 수 없다는 것입니다. 이는 쉽게 해결할 수 있습니다 sysdig
.
# sysdig -p '%fd.name' proc.name contains ld
다른 곳에서 다시 실행해 make
보세요. 짜잔! (우리가 말했듯이 존재하지 않는)를 기반으로 정적 파일을 찾고 있습니다 *.a
. 따라서 여기에는 적어도 두 가지 가능한 솔루션이 있습니다. 한편으로는 정적을 컴파일하지 않고 다른 한편으로는 이러한 다양한 정적 라이브러리를 모두 설치합니다. 파일에 플래그를 지정하는 것이 편리하므로 non-static 옵션을 사용하겠습니다.sysdig
ld
BUILD_STATIC_LIBS
CMakeLists.txt
# cd .. && rm -rf build
# mkdir build && cd build
# cmake -D BUILD_STATIC_LIBS=OFF ..
글쎄요, 그건 도움이 안 돼요. 좋아요, CMakeLists.txt
파일을 수동으로 편집 하고 STATIC
빌드를 닫겠습니다...
# cd .. && rm -rf build
# vi CMakeLists.txt
...
... make stuff again ...
[ 91%] Built target artm-static
Linking CXX shared library ../../lib/libartm.so
/usr/bin/ld: cannot find -lgflags-static
collect2: error: ld returned 1 exit status
이런, 이 프로젝트에는 정말 정적 라이브러리가 필요한 것 같습니다. 일부
yum whatprovides '*libboost_thread-mt.a'
yum whatprovides '*libc.a'
...
yum -y install glibc-static boost-static
나중에 다시 저어주세요
cd ..
git checkout CMakeLists.txt
... build again ...
...
SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel.
다른 작업을 모두 마친 후 알게 되어 다행입니다...
# yum -y install git make cmake '@Development Tools' boost-devel glibc-static \
boost-static python-devel
# git clone --branch=stable https://github.com/bigartm/bigartm.git
# cd bigartm
# mkdir build && cd build
# cmake ..
# make
이런 종류의 항목은 RPM 파일로 옮겨야 사람들이 git clone과 그저 그런 문서를 가지고 장난을 치지 않고도 이러한 종속성을 모두 나열할 수 있습니다.