模块机器“x64”与目标机器“x86”冲突

Posted

技术标签:

【中文标题】模块机器“x64”与目标机器“x86”冲突【英文标题】:Module machine 'x64' conflicts with target machine 'x86' 【发布时间】:2020-05-03 11:02:24 【问题描述】:

我检查了有关 x64 和 x86 冲突的不同问题,但没有一个适用于我的情况: 我正在我的catkin_ws 中创建一个名为beginner_tutorials 的包。在我的包中,我介绍了src 文件夹中的几个文件。然后,在执行catkin_make 时,我得到以下信息:

LINK Pass 1: command "C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\bin\Hostx86\x86\link.exe /nologo @CMakeFiles\listener.dir\objects1.rsp /out:C:\Users\Hector\Desktop\Projects\ROSProject\catkin_ws\devel\lib\beginner_tutorials\listener.exe /implib:C:\Users\Hector\Desktop\Projects\ROSProject\catkin_ws\devel\lib\listener.lib /pdb:C:\Users\Hector\Desktop\Projects\ROSProject\catkin_ws\devel\lib\beginner_tutorials\listener.pdb /version:0.0 /machine:X86 /debug /INCREMENTAL /subsystem:console C:\opt\ros\melodic\x64\lib\roscpp.lib C:\opt\rosdeps\x64\lib\boost_filesystem-vc141-mt-x64-1_66.lib C:\opt\ros\melodic\x64\lib\rosconsole.lib C:\opt\ros\melodic\x64\lib\rosconsole_log4cxx.lib C:\opt\ros\melodic\x64\lib\rosconsole_backend_interface.lib C:\opt\rosdeps\x64\lib\log4cxx.lib C:\opt\rosdeps\x64\lib\boost_regex-vc141-mt-x64-1_66.lib C:\opt\ros\melodic\x64\lib\xmlrpcpp.lib C:\opt\ros\melodic\x64\lib\roscpp_serialization.lib C:\opt\ros\melodic\x64\lib\rostime.lib C:\opt\ros\melodic\x64\lib\cpp_common.lib C:\opt\rosdeps\x64\lib\boost_system-vc141-mt-x64-1_66.lib C:\opt\rosdeps\x64\lib\boost_thread-vc141-mt-x64-1_66.lib C:\opt\rosdeps\x64\lib\boost_chrono-vc141-mt-x64-1_66.lib C:\opt\rosdeps\x64\lib\boost_date_time-vc141-mt-x64-1_66.lib C:\opt\rosdeps\x64\lib\boost_atomic-vc141-mt-x64-1_66.lib C:\opt\rosdeps\x64\lib\console_bridge.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\listener.dir/intermediate.manifest CMakeFiles\listener.dir/manifest.res" failed (exit code 1112) with the following output:

我的catkin_ws 结构如下:

catkin_ws
--build
--devel
--src
----CMakeLists
----beginner_tutorials
------msg
------src
------CMakeList
------package.xml

我的CMakeLists 里面的beginner_tutorials 看起来像:

# %Tag(FULLTEXT)%
cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)

## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

## Declare ROS messages and services
add_message_files(DIRECTORY msg FILES Num.msg)

## Generate added messages and services
generate_messages(DEPENDENCIES std_msgs)

## Declare a catkin package
catkin_package()

include_directories($catkin_INCLUDE_DIRS)

# %EndTag(FULLTEXT)%
add_executable(talker src/talker.cpp)
target_link_libraries(talker $catkin_LIBRARIES)
add_executable(points_and_lines src/print_points.cpp)
target_link_libraries(points_and_lines $catkin_LIBRARIES)
add_dependencies(talker beginner_tutorials_generate_messages_cpp)

add_executable(listener src/listener.cpp)
target_link_libraries(listener $catkin_LIBRARIES)
add_dependencies(listener beginner_tutorials_generate_messages_cpp)

我看不到在哪里可以设置有关x86的任何内容

【问题讨论】:

【参考方案1】:

由于某种原因,catkin_make 为 Visual Studio 的 X86(32 位)体系结构生成了构建文件(注意 /machine:X86 选项和调用了 ...\bin\Hostx86\x86\link.exe),这就是为什么您会遇到与X64(64 位)ROS 库。

我不能告诉你为什么,但我可以给你一些想法,也许可以找到你自己的解决方案。

您是否安装了 X64 版本的 Visual Studio 和 MSVC? 您是否按照ROS Windows installation guide 的推荐程序进行操作? 您可以尝试使用catkin_make --cmake-args -A X64 强制构建X64,这有帮助吗?如果没有,您是否收到指向缺少编译器或链接器的不同错误消息?

在你的错误搜索中看起来不错。

【讨论】:

以上是关于模块机器“x64”与目标机器“x86”冲突的主要内容,如果未能解决你的问题,请参考以下文章

LNK1112:模块机器类型“x64”与目标机器类型“x86”冲突-opencv 构建

致命错误 LNK1112:模块机器类型“x64”与通过 vcvarsall.bat x86 运行构建的目标机器类型“X86”冲突

致命错误 LNK1112:模块机器类型“x64”与通过 vcvarsall.bat x86 运行构建的目标机器类型“X86”冲突

麻烦构建旧版本的 SIP:致命错误 LNK1112:模块机器类型“x64”与目标机器类型“X86”冲突

尝试在 64 位机器上将 Detours.lib 编译为 32 位:LNK1112:模块机器类型“x86”与目标机器类型“x64”冲突

构建 Python 扩展失败(“kernel32.lib”无法打开 |“x64”与目标机器类型“x86”冲突)