首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨平台工程中的特征误差

跨平台工程中的特征误差
EN

Stack Overflow用户
提问于 2018-04-04 16:35:52
回答 1查看 321关注 0票数 2

我正在开发一个动态库,它将连接到Windows和Linux软件上。为了简化构建操作,我决定使用cmake

图书馆的结构如下:

代码语言:javascript
复制
MyProject
└ Subproject_1
| └ ...
| └ CMakeLists.txt
└ Subproject_2
| └ ...
| └ CMakeLists.txt
└ ...
└ CMakeLists.txt

在Subproject_1中,我使用了特征3.3 (我下载了最新发布)和OpenCV 3.3.0

主要的CMakeLists文件是

代码语言:javascript
复制
cmake_minimum_required (VERSION 2.8)
SET(CMAKE_CXX_STANDARD 11)
project (MyProject)

## Output directory configuration
SET(out_dir ./)
SET(EXECUTABLE_OUTPUT_PATH ${out_dir}../lib/ CACHE PATH "Build directory" FORCE)
SET(LIBRARY_OUTPUT_PATH ${out_dir}../lib/ CACHE PATH "Build directory" FORCE)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${out_dir}../lib)
SET(CMAKE_BUILD_FILES_DIRECTORY ${out_dir})
SET(CMAKE_BUILD_DIRECTORY ${out_dir})
SET(CMAKE_BINARY_DIR  ${out_dir})
SET(CMAKE_CACHEFILE_DIR ${out_dir})

SET(opencv_path "")
if (WIN32 OR MSVC OR MSYS OR MINGW)
  SET(opencv_path "../opencv-3.3.0/build64/")
endif()
message("Setted OpenCV path to '" ${opencv_path} "'")

find_package(OpenCV REQUIRED PATHS ${opencv_path}
    opencv_core opencv_features2d opencv_flann opencv_highgui opencv_imgcodecs opencv_imgproc opencv_photo opencv_plot opencv_xfeatures2d opencv_ml opencv_video
)

# Additional dependencies
include_directories(
  ${OPENCV_INCLUDE_DIRS}
  "../eigen/"
  "Subprojects_1/include"
  "Subprojects/include"
)

## Subprojects
add_subdirectory ("Subproject_1")
add_subdirectory ("Subproject_2")

而Subproject_1 CMakeLists文件是

代码语言:javascript
复制
cmake_minimum_required (VERSION 2.8)
project(Subproject_1)

file (GLOB core_file "include/*.h" "src/*.cpp")
add_library(library SHARED ${core_file})
target_link_libraries(library 
  ${OpenCV_LIBRARIES}
)

现在,当我在Windows上编译项目时,所有工作正常,但是如果我试图在Ubuntu16.04LTS上编译它,我就有以下错误:

代码语言:javascript
复制
... error: cannot declare reference to ‘Eigen::MatrixXi& {aka class Eigen::Matrix<int, -1, -1>&}’, which is not a typedef or a template type argument
   static void bitwiseAND(const Eigen::MatrixXi& m1, const Eigen::MatrixXi& m2, Eigen::MatrixXi& and);
                                                                                                 ^

... error: cannot declare reference to ‘Eigen::MatrixXi& {aka class Eigen::Matrix<int, -1, -1>&}’, which is not a typedef or a template type argument
   static void bitwiseNOT(const Eigen::MatrixXi& m, Eigen::MatrixXi& not);
                                                                     ^

我很确定这个问题不是由于cmake造成的,但是我没有在Google或者这里找到任何帮助我解决它的东西。此外,我试图跟踪英根官方指令,但它们在Windows上对我不起作用。

准确地说,我用的是:

  • 在Windows上: Visual 2017,制作3.8版和Ninja
  • 关于Ubuntu:制作4.1版

库和特征文件在两个OSs上是相同的,因为我共享包含两个存储库的工作区目录,并且我已经尝试在Ubuntu上使用Ninja。

任何建议都是欢迎的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 17:37:15

您必须避免在Linux下将notand作为变量名使用,您只需将它们重命名为其他代码即可编译。

它们实际上是C++关键字(请看这里),在Linux下会产生问题。Visual不识别它们,这解释了为什么编译在Windows下工作。详情请参见这个问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49656136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档