我一直在尝试使用静态链接的libstdc ++和libgcc编译共享库和可执行文件,但是出现上述链接器错误。我见过有人建议使用--allow-multiple-definition,但是我想知道解决此问题的正确方法。我正在使用MinGW-w64 8.1.0
我曾尝试使用hacky --allow-multiple-definition链接器标记,但是我想摆脱这一点并获得适当的解决方案。
该库的CMakeLists.txt
add_library(
engine
SHARED
${vixen_HEADERS}
${vixen_SOURCES}
)
set_target_properties(
engine PROPERTIES
PREFIX ""
OUTPUT_NAME "VixenEngine"
)
find_package(PNG REQUIRED)
find_package(GLFW REQUIRED)
find_package(Vulkan REQUIRED)
target_include_directories(
engine PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${Vulkan_INCLUDE_DIR}
${GLFW_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/contrib/glm/
${PNG_INCLUDE_DIR}
)
target_link_libraries(
engine
Vulkan::Vulkan
${GLFW_LIBRARIES}
PNG::PNG
-static-libstdc++
-static-libgcc
)
可执行文件的CMakeLists.txt
add_executable(test main.cpp properties.rc)
target_include_directories(test PUBLIC ${CMAKE_SOURCE_DIR}/engine/include/)
target_link_libraries(test engine -static-libstdc++ -static-libgcc)
答案 0 :(得分:1)
这是我修复它的方法,将其添加到您的编译器标志中;
-fno-exceptions
您可以在CMake中使用target_compile_options
来完成此操作。