В Ubuntu 18.04 я создал общую библиотеку, используя следующую compile.sh
, взятую из репозитория других людей. Я модифицировал только PATH
и LD_LIBRARY_PATH
. Стоит ли модифицировать OPENCV_INCLUDE_DIR
и OPENCV_LIBRARY_DIR
, потому что я смог его скомпилировать и получить libRender.so
? Я НЕ смог найти эти OPENCV_INCLUDE_DIR
и OPENCV_LIBRARY_DIR
на своем рабочем столе.
export PATH=$PATH:/usr/local/cuda-10.1/bin
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64
export OPENCV_INCLUDE_DIR=/orions4-zfs/projects/jingweih/opencv/include
export OPENCV_LIBRARY_DIR=/orions4-zfs/projects/jingweih/opencv/lib
export CFLAGS="-I/data/Taskonomy/opencv/include -I$OPENCV_INCLUDE_DIR"
export DFLAGS="-L/data/Taskonomy/opencv/lib -L$OPENCV_LIBRARY_DIR -lopencv_core -lopencv_highgui"
g++ -std=c++11 -c main.cpp $CFLAGS -O2 -o main.o -fPIC
g++ -std=c++11 main.o $CFLAGS $DFLAGS -O2 -o libRender.so -shared -fPIC
#g++ -std=c++11 main.o buffer.o loader.o render.o $CFLAGS $DFLAGS -o render -lcudart
#rm *.o
Но после компиляции, когда я попытался использовать библиотеку,
Render = cdll.LoadLibrary('./Render/libRender.so')
это вызвало ошибку
Traceback (most recent call last):
File "visualize_field.py", line 4, in <module>
import Render.render as render
File "/home/qimin/Projects/Cameralocalization/src/Render/render.py", line 4, in <module>
Render = cdll.LoadLibrary('./Render/libRender.so')
File "/home/qimin/anaconda3/envs/framenet/lib/python3.7/ctypes/__init__.py", line 442, in LoadLibrary
return self._dlltype(name)
File "/home/qimin/anaconda3/envs/framenet/lib/python3.7/ctypes/__init__.py", line 364, in __init__
self._handle = _dlopen(self._name, mode)
OSError: ./Render/libRender.so: undefined symbol: _ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKSt6vectorIiSaIiEE
Вот результат ldd libRender.so
linux-vdso.so.1 (0x00007ffce61af000)
libopencv_core.so.3.4 => /usr/local/lib/libopencv_core.so.3.4 (0x00007fb4da01d000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb4d9c94000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb4d9a7c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb4d968b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb4d9487000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb4d9268000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb4d9060000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb4d8e43000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb4d8aa5000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb4db10d000)
Мы будем очень признательны за любые предложения по решению этой проблемы.