Tôi có một số mã để làm với DCMTK. Tôi có thể xây dựng và chạy nó thành công nếu tôi sử dụng g ++ từ dòng lệnh. Đây là mã:Cách liên kết nhiều thư viện bằng CMake
#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;
}
Đây là build lệnh:
g++ testeapp.cxx -DHAVE_CONFIG_H -I/path_to_dcmtk/include -L/path_to_dcmtk/lib -pthread -ldcmdata -lz -loflog -lofstd -o main
Tôi muốn thực hiện một CMakeLists.txt để xây dựng nó trong Kdevelop. Đây là những gì tôi hiện có:
# 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)
Nhưng khi tôi xây dựng nó, nó có lỗi này:
/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'
Bạn có thể giúp tôi để sửa lỗi? Cảm ơn bạn.
Thank you very much. Chính xác là – user2039786
Công cụ hay. Hãy đánh dấu câu trả lời là đúng ;-) – Fraser
Ngoài ra còn có một mô-đun tìm cho DCMTK; có lẽ 'find_package (DCMTK YÊU CẦU)' sẽ được giúp đỡ? – Angew