大佬教程收集整理的这篇文章主要介绍了c – 使用MinGW / MSYS和CMake对`libintl_gettext’进行未定义的引用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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
SET(GCC_COVERAGE_COMPILE_FLAGS "-s -O2 -lintl") SET(GCC_COVERAGE_LINK_FLAGS "-lintl") SET(CMAKE_CXX_FLAGS "${CR_568_11845@AKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" ) SET(CMAKE_EXE_LINKER_FLAGS "${CR_568_11845@AKE_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")
这也没用.
根据我的理解,这应该有效,但不是:
gcc -lintl.dll -D__USE_MINGW_ANSI_STdio -Wall -Wextra -Werror -std=gnu99 -o testGettex.exe testGettex.c
输出是:
C:\Users\Julien\ApPDAta\Local\Temp\ccAvCaR2.o:testGettex.c:(.text+0x1a): undefined reference to `libintl_setlocale' C:\Users\Julien\ApPDAta\Local\Temp\ccAvCaR2.o:testGettex.c:(.text+0x2b): undefined reference to `libintl_setlocale' C:\Users\Julien\ApPDAta\Local\Temp\ccAvCaR2.o:testGettex.c:(.text+0x3E): undefined reference to `libintl_bindtextdomain' C:\Users\Julien\ApPDAta\Local\Temp\ccAvCaR2.o:testGettex.c:(.text+0x4a): undefined reference to `libintl_textdomain' C:\Users\Julien\ApPDAta\Local\Temp\ccAvCaR2.o:testGettex.c:(.text+0x56): undefined reference to `libintl_gettext' C:\Users\Julien\ApPDAta\Local\Temp\ccAvCaR2.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:\Users\Julien\ApPDAta\Local\Temp\ccAvCaR2.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:\Prog\Win-builds\bin\libintl-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在行尾移动这两个选项.
以上是大佬教程为你收集整理的c – 使用MinGW / MSYS和CMake对`libintl_gettext’进行未定义的引用全部内容,希望文章能够帮你解决c – 使用MinGW / MSYS和CMake对`libintl_gettext’进行未定义的引用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。