Linux 编译 undefined reference to '**********' 错误
Linux 编译 undefined reference to ‘**********’ 错误
错误如下:
nvidia@tegra-ubuntu:~/data/projects/VideoServer/build$ make -j6
[ 25%] Building CXX object CMakeFiles/videoserver.dir/exception.cpp.o
[ 50%] Building CXX object CMakeFiles/videoserver.dir/main.cpp.o
[ 75%] Building CXX object CMakeFiles/videoserver.dir/logger.cpp.o
In file included from /usr/include/python3.5/numpy/ndarraytypes.h:1777:0,
from /usr/include/python3.5/numpy/ndarrayobject.h:18,
from /usr/include/python3.5/numpy/arrayobject.h:4,
from /home/nvidia/data/projects/VideoServer/main.cpp:22:
/usr/include/python3.5/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " “#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION” [-Wcpp]
#warning "Using deprecated NumPy API, disable it by "
^
/home/nvidia/data/projects/VideoServer/main.cpp: In function ‘int init_numpy()’:
/home/nvidia/data/projects/VideoServer/main.cpp:115:2: warning: converting to non-pointer type ‘int’ from NULL [-Wconversion-null]
import_array();
^
[100%] Linking CXX executable videoserver
CMakeFiles/videoserver.dir/main.cpp.o: In function_import_array': /usr/include/python3.5/numpy/__multiarray_api.h:1451: undefined reference to
PyImport_ImportModule’
/usr/include/python3.5/numpy/__multiarray_api.h:1455: undefined reference toPyExc_ImportError' /usr/include/python3.5/numpy/__multiarray_api.h:1455: undefined reference to
PyExc_ImportError’
/usr/include/python3.5/numpy/__multiarray_api.h:1455: undefined reference toPyErr_SetString' /usr/include/python3.5/numpy/__multiarray_api.h:1458: undefined reference to
PyObject_GetAttrString’
/usr/include/python3.5/numpy/__multiarray_api.h:1461: undefined reference toPyExc_AttributeError' /usr/include/python3.5/numpy/__multiarray_api.h:1461: undefined reference to
PyExc_AttributeError’
/usr/include/python3.5/numpy/__multiarray_api.h:1461: undefined reference toPyErr_SetString' /usr/include/python3.5/numpy/__multiarray_api.h:1466: undefined reference to
PyCapsule_Type’
/usr/include/python3.5/numpy/__multiarray_api.h:1466: undefined reference toPyCapsule_Type' /usr/include/python3.5/numpy/__multiarray_api.h:1467: undefined reference to
PyExc_RuntimeError’
/usr/include/python3.5/numpy/__multiarray_api.h:1467: undefined reference toPyExc_RuntimeError' /usr/include/python3.5/numpy/__multiarray_api.h:1467: undefined reference to
PyErr_SetString’
/usr/include/python3.5/numpy/__multiarray_api.h:1471: undefined reference toPyCapsule_GetPointer' /usr/include/python3.5/numpy/__multiarray_api.h:1482: undefined reference to
PyExc_RuntimeError’
/usr/include/python3.5/numpy/__multiarray_api.h:1482: undefined reference toPyExc_RuntimeError' /usr/include/python3.5/numpy/__multiarray_api.h:1482: undefined reference to
PyErr_SetString’
/usr/include/python3.5/numpy/__multiarray_api.h:1490: undefined reference toPyExc_RuntimeError' /usr/include/python3.5/numpy/__multiarray_api.h:1490: undefined reference to
PyExc_RuntimeError’
/usr/include/python3.5/numpy/__multiarray_api.h:1490: undefined reference toPyErr_Format' /usr/include/python3.5/numpy/__multiarray_api.h:1496: undefined reference to
PyExc_RuntimeError’
/usr/include/python3.5/numpy/__multiarray_api.h:1496: undefined reference toPyExc_RuntimeError' /usr/include/python3.5/numpy/__multiarray_api.h:1496: undefined reference to
PyErr_Format’
/usr/include/python3.5/numpy/__multiarray_api.h:1506: undefined reference toPyExc_RuntimeError' /usr/include/python3.5/numpy/__multiarray_api.h:1506: undefined reference to
PyExc_RuntimeError’
/usr/include/python3.5/numpy/__multiarray_api.h:1506: undefined reference toPyErr_Format' /usr/include/python3.5/numpy/__multiarray_api.h:1518: undefined reference to
PyExc_RuntimeError’
/usr/include/python3.5/numpy/__multiarray_api.h:1518: undefined reference toPyExc_RuntimeError' /usr/include/python3.5/numpy/__multiarray_api.h:1518: undefined reference to
PyErr_Format’
CMakeFiles/videoserver.dir/main.cpp.o: In functioninit_numpy()': /home/nvidia/data/projects/VideoServer/main.cpp:115: undefined reference to
PyErr_Print’
/home/nvidia/data/projects/VideoServer/main.cpp:115: undefined reference toPyExc_ImportError' /home/nvidia/data/projects/VideoServer/main.cpp:115: undefined reference to
PyExc_ImportError’
/home/nvidia/data/projects/VideoServer/main.cpp:115: undefined reference toPyErr_SetString' CMakeFiles/videoserver.dir/main.cpp.o: In function
main’:
/home/nvidia/data/projects/VideoServer/main.cpp:990: undefined reference toPy_Initialize' /home/nvidia/data/projects/VideoServer/main.cpp:991: undefined reference to
PyRun_SimpleStringFlags’
/home/nvidia/data/projects/VideoServer/main.cpp:992: undefined reference toPyRun_SimpleStringFlags' /home/nvidia/data/projects/VideoServer/main.cpp:993: undefined reference to
PyRun_SimpleStringFlags’
/home/nvidia/data/projects/VideoServer/main.cpp:994: undefined reference toPyRun_SimpleStringFlags' /home/nvidia/data/projects/VideoServer/main.cpp:1011: undefined reference to
PyImport_ImportModule’
/home/nvidia/data/projects/VideoServer/main.cpp:1015: undefined reference toPyErr_Occurred' /home/nvidia/data/projects/VideoServer/main.cpp:1016: undefined reference to
PyErr_Print’
/home/nvidia/data/projects/VideoServer/main.cpp:1019: undefined reference toPyObject_GetAttrString' /home/nvidia/data/projects/VideoServer/main.cpp:1020: undefined reference to
PyObject_CallObject’
/home/nvidia/data/projects/VideoServer/main.cpp:1024: undefined reference toPyList_Size' /home/nvidia/data/projects/VideoServer/main.cpp:1027: undefined reference to
PyList_GetItem’
/home/nvidia/data/projects/VideoServer/main.cpp:1028: undefined reference toPyTuple_GetItem' /home/nvidia/data/projects/VideoServer/main.cpp:1029: undefined reference to
PyTuple_GetItem’
/home/nvidia/data/projects/VideoServer/main.cpp:1030: undefined reference toPyTuple_GetItem' /home/nvidia/data/projects/VideoServer/main.cpp:1034: undefined reference to
PyArg_Parse’
/home/nvidia/data/projects/VideoServer/main.cpp:1035: undefined reference toPyArg_Parse' /home/nvidia/data/projects/VideoServer/main.cpp:1036: undefined reference to
PyArg_Parse’
/home/nvidia/data/projects/VideoServer/main.cpp:1120: undefined reference toPyImport_ImportModule' /home/nvidia/data/projects/VideoServer/main.cpp:1121: undefined reference to
PyErr_Occurred’
/home/nvidia/data/projects/VideoServer/main.cpp:1122: undefined reference toPyErr_Print' /home/nvidia/data/projects/VideoServer/main.cpp:1126: undefined reference to
PyObject_GetAttrString’
/home/nvidia/data/projects/VideoServer/main.cpp:1137: undefined reference toPyTuple_New' /home/nvidia/data/projects/VideoServer/main.cpp:1138: undefined reference to
PyDict_New’
/home/nvidia/data/projects/VideoServer/main.cpp:1143: undefined reference toPy_BuildValue' /home/nvidia/data/projects/VideoServer/main.cpp:1144: undefined reference to
Py_BuildValue’
/home/nvidia/data/projects/VideoServer/main.cpp:1163: undefined reference toPyDict_SetItem' /home/nvidia/data/projects/VideoServer/main.cpp:1168: undefined reference to
PyDict_SetItem’
/home/nvidia/data/projects/VideoServer/main.cpp:1170: undefined reference toPyDict_SetItem' /home/nvidia/data/projects/VideoServer/main.cpp:1193: undefined reference to
PyTuple_SetItem’
/home/nvidia/data/projects/VideoServer/main.cpp:1195: undefined reference toPyEval_CallObjectWithKeywords' /home/nvidia/data/projects/VideoServer/main.cpp:1222: undefined reference to
PyArg_Parse’
/home/nvidia/data/projects/VideoServer/main.cpp:1230: undefined reference toPyList_Size' /home/nvidia/data/projects/VideoServer/main.cpp:1233: undefined reference to
PyList_GetItem’
/home/nvidia/data/projects/VideoServer/main.cpp? undefined reference toPyTuple_GetItem' /home/nvidia/data/projects/VideoServer/main.cpp:1235: undefined reference to
PyTuple_GetItem’
/home/nvidia/data/projects/VideoServer/main.cpp:1236: undefined reference toPyTuple_GetItem' /home/nvidia/data/projects/VideoServer/main.cpp:1237: undefined reference to
PyTuple_GetItem’
/home/nvidia/data/projects/VideoServer/main.cpp:1238: undefined reference toPyTuple_GetItem' CMakeFiles/videoserver.dir/main.cpp.o:/home/nvidia/data/projects/VideoServer/main.cpp:1239: more undefined references to
PyTuple_GetItem’ follow
CMakeFiles/videoserver.dir/main.cpp.o: In functionmain': /home/nvidia/data/projects/VideoServer/main.cpp:1246: undefined reference to
PyArg_Parse’
/home/nvidia/data/projects/VideoServer/main.cpp:1247: undefined reference toPyArg_Parse' /home/nvidia/data/projects/VideoServer/main.cpp:1248: undefined reference to
PyArg_Parse’
/home/nvidia/data/projects/VideoServer/main.cpp:1249: undefined reference toPyArg_Parse' /home/nvidia/data/projects/VideoServer/main.cpp:1250: undefined reference to
PyArg_Parse’
CMakeFiles/videoserver.dir/main.cpp.o:/home/nvidia/data/projects/VideoServer/main.cpp:1251: more undefined references toPyArg_Parse' follow CMakeFiles/videoserver.dir/main.cpp.o: In function
main’:
/home/nvidia/data/projects/VideoServer/main.cpp:1304: undefined reference to `Py_Finalize’
collect2: error: ld returned 1 exit status
CMakeFiles/videoserver.dir/build.make:177: recipe for target ‘videoserver’ failed
make[2]: *** [videoserver] Error 1
CMakeFiles/Makefile2:67: recipe for target ‘CMakeFiles/videoserver.dir/all’ failed
make[1]: *** [CMakeFiles/videoserver.dir/all] Error 2
Makefile:127: recipe for target ‘all’ failed
make: *** [all] Error 2
解决办法
在CmakeLists.txt中的target_link_libraries中加入应用的库
cmake_minimum_required(VERSION 3.0)
project(videoserver)
set(CMAKE_BUILD_TYPE, Debug)
#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11")
find_package(OpenCV REQUIRED)
find_package(Boost 1.58.0 REQUIRED COMPONENTS system filesystem)
include_directories(/home/nvidia/data/projects/VideoServer/WebsocketEnv /usr/include/python3.5 /usr/lib/python3/dist-packages/numpy/core/include)
link_directories(/home/nvidia/ffmpeg_build/lib /home/nvidia/data/projects/VideoServer/opencv-4.1.0/build/lib /usr/lib/python3.5/config-3.5m-aarch64-linux-gnu /usr/lib/python3)
add_executable(videoserver main.cpp logger.cpp exception.cpp)
install(TARGETS videoserver RUNTIME DESTINATION bin)
target_link_libraries (videoserver X11 pthread libavcodec.so.58 libavdevice.so.58 libavfilter.so.7 libavformat.so.58 libavutil.so.56 libswresample.so.3 libswscale.so.5 ${OpenCV_LIBS} ${Boost_LIBRARIES} libpython3.5.so libpython3.5m.so)