C++ 使用ocam编译时缺少mil.h标头
我编写了一个共享对象库,它依赖于一个名为mil.h的外部库,它也是一个.so,位于我的/opt/文件夹中。我通过Cmake的C++ 使用ocam编译时缺少mil.h标头,c++,cmake,C++,Cmake,我编写了一个共享对象库,它依赖于一个名为mil.h的外部库,它也是一个.so,位于我的/opt/文件夹中。我通过Cmake的INCLUDE_DIRECTORIES和LINK_DIRECTORIES将它添加到我的项目中,它编译并生成了一个.so。虽然当我尝试使用生成的.so GCC编译main.cpp时,会返回一个错误,说明找不到mil.h。如果lddmy.因此我检查了mil.h的参考是否存在。我不明白错误背后的原因,以及如何纠正它。最初的想法是我的项目只依赖于。所以我写了,因为我稍后将从另一种编
INCLUDE_DIRECTORIES
和LINK_DIRECTORIES
将它添加到我的项目中,它编译并生成了一个.so。虽然当我尝试使用生成的.so GCC编译main.cpp时,会返回一个错误,说明找不到mil.h。如果ldd
my.因此我检查了mil.h的参考是否存在。我不明白错误背后的原因,以及如何纠正它。最初的想法是我的项目只依赖于。所以我写了,因为我稍后将从另一种编程语言调用它
我的Cmake文件来自我的
cmake_minimum_required(VERSION 3.5)
project(OcamShared LANGUAGES C CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#Adding external libraries
INCLUDE_DIRECTORIES(/opt/matrox_imaging/mil/include)
LINK_DIRECTORIES(/opt/matrox_imaging/mil/lib)
#Adding internal libraries
add_library(
ocam2-sdk SHARED
ocam2_sdk.h
ocam2_pvt.h
ocam2_sdk.c
)
add_library(OcamShared SHARED
OcamShared_global.h
ocamshared.cpp
ocamshared.h
)
target_compile_definitions(OcamShared PRIVATE OCAMSHARED_LIBRARY ocam2-sdk)
TARGET_LINK_LIBRARIES(OcamShared libmil.so)
而我的main.cpp Cmake文件是
cmake_minimum_required(VERSION 3.5)
project(OcamShared_teste LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(THREADS_PREFER_PTHREAD_FLAG ON)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
INCLUDE_DIRECTORIES(
/home/flidemo/OCAM_tests/OCAM_teste/OcamShared
)
LINK_DIRECTORIES(
/home/flidemo/OCAM_tests/OCAM_teste/build-OcamShared-Desktop-Debug
)
add_executable(OcamShared_teste main.cpp)
target_link_libraries(OcamShared_teste PRIVATE Threads::Threads)
target_link_libraries(OcamShared_teste PRIVATE libOcamShared.so)
确切的错误是
[ 50%] Building CXX object CMakeFiles/OcamShared_teste.dir/main.cpp.o
In file included from /home/flidemo/OCAM_tests/OCAM_teste/OcamShared_teste/main.cpp:2:0:
/home/flidemo/OCAM_tests/OCAM_teste/OcamShared/ocamshared.h:5:17: fatal error: mil.h: No such file or directory
compilation terminated.
我使用#include
包含mil.h,但如果我使用#include“mil.h”
编辑:
mil.h
位于/opt/matrox_imaging/mil文件夹中,它包含在my.so的编译链路径上,这是使用此库的唯一实例。尖括号样式(#include
)是为系统标题或您的incide路径中的内容保留的。在源目录中放置的任何内容都需要包含与源路径相关的“x.h”。mil.h
在哪里运行?它应该在您的include路径中吗?我的建议是:阅读和(其预处理器)的文档。由于gcc
和g++
接受-H
选项,请注意cmake
,gcc
,g++
都是(或自由软件)。您可以研究他们的源代码,并根据您的具体需要进行修改。然而,你可能需要几个月的工作;请考虑将其中的一些部分转包。您添加<代码> /opt/MatrxI/I/I/I/<代码>以包含目录,但是<代码> MI.H.//COD>在<代码> /opt/MatrxIsIMP/MIL<代码>中,并尝试通过<代码> <代码>将其包含在内。将标题移动到/opt/matrox\u imaging/mil/include
或将/opt/matrix\u imaging/mil
添加到您的include目录。共享库libOcamShared。因此
既不包含mil.h
标题,也不包含其路径。因此,对于main.cpp
也需要INCLUDE\u目录(/opt/matrox\u imaging/mil/INCLUDE)
。