0

我正在尝试使用在 32 位和 64 位 Linux 上运行的 Firebreath 构建 Linux 浏览器插件。

在我的 X11/projectDef.cmake 我有

target_link_libraries(${PROJECT_NAME}
    ${PLUGIN_INTERNAL_DEPS}
    "${CMAKE_CURRENT_SOURCE_DIR}/lib/libOIS-1.4.0_32.so"
    )

目前,当我想要进行不同的构建时,我只是手动将那条线切换 32 更改为 64,所以这可能是错误的。但我的问题是,即使我使用 32 位库构建并成功编译,尝试在 Firefox 中加载插件时也会出现以下错误:

$ firefox
LoadPlugin: failed to initialize shared library /home/daniel/.mozilla/plugins/npBoomstickJavaScriptJoystickSupport.so [libOIS-1.4.0.so: wrong ELF class: ELFCLASS64]

如何设置我的 cmake 以根据架构自动包含正确的库?有没有办法在同一台机器上同时构建 x86 和 x86_64?如何让插件正确加载,或者有没有办法进一步调试这个问题?

4

1 回答 1

0

据我所知,在 64 位机器上构建 32 位的唯一方法是使用交叉编译:http ://www.vtk.org/Wiki/CMake_Cross_Compiling

我从来没有真正尝试过这个,但是在 CMake 中你可以使用CMAKE_SIZEOF_VOID_P 它在 32 位模式下是 4,在 64 位模式下是 8。您可以在您的 cmake 脚本中添加一个 if 以根据其大小设置正确的二进制文件。

于 2011-07-20T19:29:46.310 回答