Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用ocam编译时缺少mil.h标头_C++_Cmake - Fatal编程技术网

C++ 使用ocam编译时缺少mil.h标头

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的参考是否存在。我不明白错误背后的原因,以及如何纠正它。最初的想法是我的项目只依赖于。所以我写了,因为我稍后将从另一种编

我编写了一个共享对象库,它依赖于一个名为mil.h的外部库,它也是一个.so,位于我的/opt/文件夹中。我通过Cmake的
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)