Ich habe mehrere Fragen überprüft, aber keine der Antworten half meinem Fall. Hier sind die, die ich überprüftDynamisch Boost mit Cmake verknüpfen
How to link C++ program with Boost using CMake
Whats the proper way to link Boost with CMake and Visual Studio in Windows?
Error linking Boost with CMake
I-Boost 1.61 mit
b2 variant=debug,release link=static,shared threading=single,multi
Unter Bühne/lib erstellt haben, habe ich alle dlls und Libs . Im Anschluss an boost :: sind System-Bibliotheken vorhanden unter der Bühne/lib
boost_system-vc140-mt-1_61.dll
boost_system-vc140-mt-1_61.lib
boost_system-vc140-mt-gd-1_61.dll
boost_system-vc140-mt-gd-1_61.lib
libboost_system-vc140-mt-1_61.lib
libboost_system-vc140-mt-gd-1_61.lib
ich ein Grundlade Asio Beispiel kompilieren will (das System lib von Boost erfordern). Ich mache meine cmake-Datei mit cmake-gui in Windows und erzeuge dann VS2015-Projektdateien. Nach dem Versuch, das Projekt zu erstellen, tritt ein Fehler auf.
1>------ Build started: Project: ZERO_CHECK, Configuration: Debug Win32 ------
2>------ Build started: Project: boost-asio, Configuration: Debug Win32 ------
2> main.cpp
2> Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:
2> - add -D_WIN32_WINNT=0x0501 to the compiler command line; or
2> - add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.
2> Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).
2>LINK : fatal error LNK1104: cannot open file 'libboost_system-vc140-mt-gd-1_61.lib'
========== Build: 1 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Die Inhalte meiner CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(boost-asio)
find_package(Boost 1.61.0 COMPONENTS system REQUIRED)
# set cmake variables
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/bin)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
# definitions
add_definitions(-DBOOST_LOG_DYN_LINK=1)
# set sources
set(SOURCES src/main.cpp)
# manage compilation and linkage
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(boost-asio ${SOURCES})
target_link_libraries(boost-asio ${Boost_LIBRARIES})
message(${Boost_INCLUDE_DIRS})
message(${Boost_LIBRARIES})
endif()
Bitte beachten Sie, dass die Definition in der Cmake Quelle nach einer Antwort auf irgendeine Frage hinzugefügt wird, ich überprüft. FindBoost findet die Boost-Bibliothek, hier ist eine Ausgabe von cmake-gui
Boost version: 1.61.0
Found the following Boost libraries:
system
C:/Boost/boost_1_61_0
optimizedC:/Boost/boost_1_61_0/stage/lib/boost_system-vc140-mt-1_61.libdebugC:/Boost/boost_1_61_0/stage/lib/boost_system-vc140-mt-gd-1_61.lib
Nun gibt es zwei Probleme hier. Erstens kann es die Bibliothek nicht finden, und zweitens, obwohl es den Linker eindeutig dazu anleitet, dynamisch zu verknüpfen, sucht es immer noch nach einer statischen Bibliothek. Ich weiß nicht, ob diese Probleme zusammenhängen. Wie man dieses Problem löst? Wie man Boost dynamisch mit Cmake verbindet?
EDIT1: Hier ist der Code, den ich verwende, wenn Sie es testen möchten.
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main() {
boost::asio::io_service ioservice;
boost::asio::deadline_timer t(ioservice, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}
'Boost_USE_ *' Variablen sollten ** vor ** 'find_package (Boost)' Aufruf gesetzt werden für eine Wirkung haben . – Tsyvarev
Versuchte Gebäude, nachdem 'find_package (Boost)' direkt vor 'if (Boost_FOUND) 'hinzugefügt wurde, scheint es keinen Effekt zu haben –
Sie müssen den CMake-Cache löschen, um das Ergebnis von' find_package() 'zu regenerieren. – Tsyvarev