У меня есть globalInfo.dll
для
Исходный файл:
#include "util/timer.h"
#include "util/winDll.h"
namespace GLOBAL
{
DLL_EXPORT timer::timestamp currentTime;
DLL_EXPORT timer globalTimer;
static void timerAction (uint64_t nowTime, void* nptr)
{
currentTime.time = nowTime;
}
DLL_EXPORT void init()
{
currentTime.time = timer::getNowTimestamp();
globalTimer.start();
globalTimer.addTimer(nullptr, timerAction, 1000000);
}
DLL_EXPORT void close()
{
globalTimer.stop();
}
}
Заголовочный файл:
#pragma once
#include "util/timer.h"
#include "util/winDll.h"
namespace GLOBAL
{
DLL_IMPORT extern timer::timestamp currentTime;
DLL_IMPORT extern timer globalTimer;
constexpr static auto version = "0.1.0";
DLL_EXPORT void init();
DLL_EXPORT void close();
}
Я использую currentTime
в других dll
с :
now.time = GLOBAL::currentTime.time;
Это проект CMake, я использую TARGET_LINK_LIBRARIES
для связи globalInfo
. На Linux платформе все в порядке, но на Windows Visual Studio 2019 я получил ошибку LNK2001:
**struct timer::timestamp GLOBAL::currentTime" (?currentTime@GLOBAL@@3Utimestamp@timer@@A)**
My CMakeLists.txt
:
aux_source_directory(database databaseDir)
add_library(database SHARED ${databaseDir})
TARGET_LINK_LIBRARIES(database util globalInfo thread memory meta ${LZ4} ${GLOG} ${GFLAGS})
target_include_directories(database PUBLIC ${BASE_INCLUDE_PATH} ${GLOG_INCLUDE_PATH} ${GLFAG_INCLUDE_PATH})