c – 使用MinGW / MSYS和CMake对`libintl_gettext’进行未定义的
发布时间:2020-12-16 07:14:18 所属栏目:百科 来源:网络整理
导读:我正在尝试将gettext添加到C项目中.它在 Linux下编译并运行良好,但是在Windows 7 64位中我得到了MinGW32的链接器错误.我正在使用cmake -G“MSYS Makefiles”进行编译..因为MinGW不适用于模糊的原因.我也试过忍者. 在CMakeLists.txt中,我有 find_package(Gett
我正在尝试将gettext添加到C项目中.它在
Linux下编译并运行良好,但是在Windows 7 64位中我得到了MinGW32的链接器错误.我正在使用cmake -G“MSYS Makefiles”进行编译..因为MinGW不适用于模糊的原因.我也试过忍者.
在CMakeLists.txt中,我有 find_package(Gettext REQUIRED include_directories(${GETTEXT_INCLUDE_DIR}) if (INTL_FOUND) find_package(INTL REQUIRED) include_directories(${INTL_INCLUDE_DIR}) endif() 发现的是 GETTEXT_INCLUDE_DIR = C:/MinGW/msys/1.0/local/include 该项目正在编译没有问题,但在链接阶段,我得到以下错误: <source file location> undefined reference to `libintl_gettext' <source file location> undefined reference to `libintl_setlocale' <source file location> undefined reference to `libintl_textdomain' 等等 我看了一眼https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined 并将以下内容添加到CMakeLists.txt: SET(GCC_COVERAGE_COMPILE_FLAGS "-s -O2 -lintl") SET(GCC_COVERAGE_LINK_FLAGS "-lintl") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" ) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} 然后我试了 SET(GCC_COVERAGE_COMPILE_FLAGS "-s -O2 -lintl -liconv -LC:/MinGW/msys/1.0/local/lib -IC:/MinGW/msys/1.0/local/include") SET(GCC_COVERAGE_LINK_FLAGS "-lintl -liconv -LC:/MinGW/msys/1.0/local/lib -IC:/MinGW/msys/1.0/local/include") 这也没用. 解决方法
我正在使用Win-builds,我遇到了类似的问题.
我只是尝试使用gettext构建Hello World程序. 根据我的理解,这应该有效,但不是: gcc -lintl.dll -D__USE_MINGW_ANSI_STDIO -Wall -Wextra -Werror -std=gnu99 -o testGettex.exe testGettex.c 输出是: C:UsersJulienAppDataLocalTempccAvCaR2.o:testGettex.c:(.text+0x1a): undefined reference to `libintl_setlocale' C:UsersJulienAppDataLocalTempccAvCaR2.o:testGettex.c:(.text+0x2b): undefined reference to `libintl_setlocale' C:UsersJulienAppDataLocalTempccAvCaR2.o:testGettex.c:(.text+0x3e): undefined reference to `libintl_bindtextdomain' C:UsersJulienAppDataLocalTempccAvCaR2.o:testGettex.c:(.text+0x4a): undefined reference to `libintl_textdomain' C:UsersJulienAppDataLocalTempccAvCaR2.o:testGettex.c:(.text+0x56): undefined reference to `libintl_gettext' C:UsersJulienAppDataLocalTempccAvCaR2.o:testGettex.c:(.text+0x5e): undefined reference to `__printf__' d:/prog/win-builds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: C:UsersJulienAppDataLocalTempccAvCaR2.o: bad reloc address 0x0 in section `.pdata' d:/prog/win-builds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation collect2.exe: error: ld returned 1 exit status 所以我尝试使用.dll直接链接而不是使用.dll.a,我可以用这个命令构建: gcc -D__USE_MINGW_ANSI_STDIO -Wall -Wextra -Werror -std=gnu99 -o testGettex.exe D:ProgWin-buildsbinlibintl-8.dll testGettex.c 但是,我不知道你怎么告诉CMake直接链接到.dll …也许最好的办法是找到MinGW的bug跟踪器并用文件libintl.dll.a解释它们的问题. 编辑:我刚刚阅读了你给出的链接,我看到了另一个也工作的解决方案,将两个-l选项移动到命令的末尾 gcc -D__USE_MINGW_ANSI_STDIO -Wall -Wextra -Werror -std=gnu99 -o testGettex.exe testGettex.c -lintl.dll -liconv 也许有办法告诉CMake在行尾移动这两个选项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读