Mingw / Boost / C ++ - ошибка связи (неопределенная ссылка на __imp_GetACP) при использовании Boost Locale - PullRequest
0 голосов
/ 07 марта 2020

Когда я пытаюсь использовать пакет Boost :: locale в моем проекте C ++ (что-то столь же простое, как это):

#include <boost/locale.hpp>
. . . . . .
boost::locale::generator gen;
std::locale lx = gen("rus");
std::locale::global(lx);

Я получаю ошибку ссылки:

[100%] Linking CXX executable DBMSProject.exe
C:/PROGRA~1/MINGW-~1/X86_64~1.0-P/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib\libiconv.a(localcharset.o):localcharset.c:(.text+0x63): undefined reference to `__imp_GetACP'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFiles\DBMSProject.dir\build.make:122: DBMSProject.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:92: CMakeFiles/DBMSProject.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:99: CMakeFiles/DBMSProject.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:134: DBMSProject] Error 2

Моя настройка:

  • Windows 10 x64

  • Mingw x86_64-8.1.0-posix-seh-rt_v6-rev0 (g cc 8.1.0)

  • CMake 3.17.0-rc2, его опции: -DBOOST_LIBRARYDIR="valid-path-to-built-boost-libs" -DBoost_COMPILER=mgw81

  • Повышение 1.72.0, построенное с помощью g cc 8.1.0 сверху (команда для сборки была b2 --build-dir="..." --prefix="..." toolset=gcc install --build-type=complete -j 4)

CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)
project(DBMSProject)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_PREFIX_PATH ${BOOST_LIBRARYDIR}\\cmake)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -liconv")

find_package(Boost CONFIG REQUIRED COMPONENTS locale regex) # yes, I also tried regex, and everything was OK
include_directories(${Boost_INCLUDE_DIRS})

add_executable(DBMSProject main.cpp)
target_link_libraries(DBMSProject -static)
target_link_libraries(DBMSProject Boost::locale Boost::regex)

Итак, вопрос: как можно Я делаю это, чтобы ссылка правильно? Я уже пытался гуглить эту проблему, но ничто не кажется решением моей проблемы.

Может быть, это проблема kbown, ошибка?

Я не установил ICU в моей системе, может быть это так?

Может мне стоит динамически связать библиотеку Boost.locale, а не делать это статически? Если да, то как я могу это сделать (потому что в его каталоге компоновки много расширенных языковых библиотек)?

1 Ответ

0 голосов
/ 21 апреля 2020

Возможно, вам нужно связать с iconv, сработало в моем случае.

Ошибка связи с GetACP под mingw64 (mingw-builds)

...