2016-03-23 2 views
0

У меня есть проект с использованием boost 1.60. В настоящее время сборка этого проекта не может со следующим сообщением:Проблемы при связывании с boost 1.60

libboost_thread-vc140-mt-1_60.lib(thread.obj) : fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64' 

Это должно быть легко решить, но это странное сообщение. Поэтому я подтвердил, что библиотеки boost были действительно x64 с dumpbin. Специально, я проверил libboost_thread-vc140-mt-1_60.lib и получил результат, 8664 machine (x64).

Мое следующее предположение было то, что CMake делал что-то неправильно. Сброс некоторых переменных дал следующее:

-- BOOST_ROOT: D:\path\to\project\..\ext/boost 
-- BOOST_LIBRARYDIR: D:\path\to\project\..\ext/boost/lib64 
-- BOOST_INCLUDEDIR: D:\path\to\project\..\ext/boost/include 
-- Boost version: 1.60.0 

Это все допустимые пути. Кроме того, в этом разделе CMakeLists.txt, кажется, действительно:

if(WIN32) 
    # set boost needed boost library parameters 
    set(Boost_USE_MULTITHREADED ON) 
    set(Boost_USE_STATIC_LIBS ON) 
    set(BOOST_ROOT ${LIB_BOOST_ROOT_DIR}) 
    set(BOOST_LIBRARYDIR ${LIB_BOOST_ROOT_DIR}/lib${LIB_SUFFIX}) 
    set(BOOST_INCLUDEDIR ${LIB_BOOST_ROOT_DIR}/include) 
    message("-- Boost_USE_MULTITHREADED: ${Boost_USE_MULTITHREADED}") 
    message("-- Boost_USE_STATIC_LIBS: ${Boost_USE_STATIC_LIBS}") 
    message("-- BOOST_ROOT: ${BOOST_ROOT}") 
    message("-- BOOST_LIBRARYDIR: ${BOOST_LIBRARYDIR}") 
    message("-- BOOST_INCLUDEDIR: ${BOOST_INCLUDEDIR}") 
    find_package(BOOST 1.60 REQUIRED COMPONENTS thread system chrono regex filesystem iostreams log) 
endif(WIN32) 

Итак, что я здесь отсутствует?

EDIT

Сборка проекта осуществляется с ninja. Когда я смотрю на CMakeCache.txt, я вижу это:

//Flags used by the linker. 
CMAKE_EXE_LINKER_FLAGS:STRING= /machine:x64 

EDIT 2

И я посмотрел в сценарий сборки. Перед вызовом CMake, я начинаю vcvarsall.bat с параметром amd64.

+0

Какая архитектура предназначена для вашей программы? x86 или x64? –

+0

@ColinBasnett: Я редактировал вопрос. Вы можете видеть, что сборка установлена ​​для x64. – kristian

+0

Убедитесь, что правильная инструментальная цепочка Visual Studio установлена ​​в вашем PATH во время компиляции как библиотек boost, так и вашей программы. Это означает, что вы должны запускать все свои команды из командной строки x64 VS, если вы ориентируетесь на x64. – ViNi89

ответ

0

Из сообщения вы, безусловно, пытаетесь связать 32-битную вещь с 64-разрядной вещью. Никакого вопроса об этом.

Итак, что-то не так, как кажется.

Попробуйте запустить командную строку и запустить ее самостоятельно в командной строке. Проверьте все пути и переменные среды.

Смежные вопросы