[英]How to link multiple libraries using CMake
我有一些與 DCMTK 相關的代碼。 如果我從命令行使用 g++,我可以成功構建並運行它。 這是代碼:
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
int main()
{
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile("test.dcm");
if (status.good())
{
OFString patientsName;
if (fileformat.getDataset()->findAndGetOFString(DCM_PatientsName, patientsName).good())
{
cout << "Patient's Name: " << patientsName << endl;
} else
cerr << "Error: cannot access Patient's Name!" << endl;
} else
cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;
return 0;
}
這是構建命令:
g++ testeapp.cxx -DHAVE_CONFIG_H -I/path_to_dcmtk/include -L/path_to_dcmtk/lib -pthread -ldcmdata -lz -loflog -lofstd -o main
我想制作一個 CMakeLists.txt 以在 Kdevelop 中構建它。 這是我目前擁有的:
# Configure toplevel directories
SET( PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Top level.")
SET( INCLUDEDIR ${PREFIX}/include CACHE PATH "Include files.")
SET( LIBDIR ${PREFIX}/lib CACHE PATH "Libraries.")
FIND_PACKAGE ( Threads REQUIRED )
# Configure DCMTK
FIND_PATH( DINIFTI_DCMTK_INCLUDE dcmtk
PATHS ${INCLUDEDIR}
PATH_SUFFIXES dcmtk
DOC "Path to the DCMTK headers." )
FIND_LIBRARY(DINIFTI_DCMTK_LIB NAMES dcmdata ofstd oflog
HINTS ${LIBDIR} ${LIBDIR})
TARGET_LINK_LIBRARIES( dinifti ${DINIFTI_DCMTK_LIB}
${DINIFTI_ZNZ_LIB}
${CMAKE_THREAD_LIBS_INIT}
z )
但是當我構建它時,它有這個錯誤:
/usr/local/lib/libdcmdata.a(dcfilefo.o): In function `DcmFileFormat::remove(DcmItem*)':
dcfilefo.cc:(.text+0x1788): undefined reference to `log4cplus::Logger::forcedLog(int, OFString const&, char const*, int, char const*) const'
你能幫我解決這個錯誤嗎? 謝謝你。
看起來您希望find_library
調用使用 3 個單獨的庫填充變量DINIFTI_DCMTK_LIB
。
這不是find_library
工作方式。 NAMES
之后的不同參數代表單個庫可以調用的所有不同名稱。 這允許命令跨平台工作,其中相同的庫可以在不同的平台上被稱為不同的東西。
一個小問題是您可能更喜歡在此處使用PATHS
而不是HINTS
。 形成文檔:
...
HINTS
選項 ... 應該是由系統自省計算的路徑,例如由已找到的另一個項目的位置提供的提示。 硬編碼的猜測應該用PATHS
選項指定。
我想你想要更像:
find_library(DINIFTI_DCMTK_LIB NAMES dcmdata PATHS ${LIBDIR})
find_library(OFSTD_LIB NAMES ofstd PATHS ${LIBDIR})
find_library(OFLOG_LIB NAMES oflog PATHS ${LIBDIR})
target_link_libraries(dinifti ${DINIFTI_DCMTK_LIB}
${OFLOG_LIB}
${OFSTD_LIB}
${DINIFTI_ZNZ_LIB}
${CMAKE_THREAD_LIBS_INIT}
z)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.