无法在Centos7上构建32位库

时间:2019-05-16 11:42:20

标签: c++ linux cmake centos centos7

我有Centos7 Vagrant盒子,里面有'devtoolset-7'。

我使用'CMake'来构建和编译我的库。这是CMakeLists.txt文件

set(CMAKE_BUILD_TYPE Release)
include_directories("../Include" "/usr/include/libusb-1.0")
add_library(CXIOInterface SHARED 
        CXIOInterface.cpp
        HidInterface_Linux.cpp
        HidDevice_Linux.cpp
        ../Include/Debug.cpp
        app.cpp
        CrcLibrary.cpp
        ContextFunctions.cpp)
set(PROJECT_LINK_LIBS -ludev -lusb-1.0)
target_link_libraries(CXIOInterface LINK_PUBLIC ${PROJECT_LINK_LIBS})
set(CMAKE_CXX_FLAGS "-m32")

当我将其编译为64位时,一切正常。但是当我将其编译为32位时,出现错误消息:

/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld: skipping incompatible /opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/libstdc++_nonshared.a when searching for -lstdc++_nonshared
/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld: cannot find -lstdc++_nonshared
collect2: error: ld returned 1 exit status
make[2]: *** [CXIOInterface/libCXIOInterface.so] Error 1 

你们能帮我吗,我不明白在这里做什么。

已经有一个链接告诉我安装rpm,但是我是Ubuntu用户,而不是Centos。第一次使用它。

https://www.centos.org/forums/viewtopic.php?t=64011

1 个答案:

答案 0 :(得分:0)

  

/ opt / rh / devtoolset-7 / root / usr / libexec / gcc / x86_64-redhat-linux / 7 / ld:跳过不兼容的/ opt / rh / devtoolset-7 / root / usr / lib / gcc / x86_64 -redhat-linux / 7 / libstdc ++ _ nonshared.a时搜索-lstdc ++ _ nonshared

意味着链接器找到的库与ABI不兼容,在这种情况下,它与32位不兼容。

之所以会这样,是因为您缺少为此所需的软件包,就像您添加的链接所示。

首先,找出已安装的devtoolset的当前版本:

rpm -qa | grep devtoolset-7

从输出中,您应该能够轻松确定当前使用的版本。

然后,尝试运行:

yum install devtoolset-7-libstdc++-devel-7.2.1-1.el7.x86_64.rpm

注意:我使用的是7.2.1-1,因为这是我在Google中搜索时找到的版本,如果您安装了其他版本,请改用它。