我尝试将第三方库静态链接到我自己的.exe,这样我只需要分发一个.exe文件。首先,我从源代码构建了所有第三方静态库,生成了几个.lib文件。
然后在visual studio中,在我自己的项目中,我设置了Project->properties->C/C++->Code generation->Runtime Library to Multi-threaded (/MT)
。LNK2038 mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in ConsoleApplication1.obj
后面的部分MT_StaticRelease
确实有意义,因为我正在尝试静态链接,而前面的部分MD_DynamicRelease
是绝对错误的,因为我提供了静态库。我将Project->properties->Linker->General->Additional Library Dependencies
设置为一个只包含*.lib
的文件夹。我非常肯定这些 *.lib是静态库而不是导入库。
当我更改为Project->properties->C/C++->Code generation->Runtime Library to Multi-threaded DLL (/MD)
时,构建成功。
visual studio将 *.lib识别为动态库,这真的很奇怪。
1.我已经检查了%PATH%
以排除任何其他可能的污染。你有什么想法吗?
1.我已经删除了所有该高速缓存从以前的建设。
#include "gdcmReader.h"
#ifdef _WIN32
#pragma comment(lib, "gdcmDSED")
#pragma comment(lib,"WS2_32")
#endif
typedef std::set<gdcm::DataElement> DataElementSet;
typedef DataElementSet::const_iterator ConstIterator;
int main(int argc, char *argv[])
{
if (argc < 2) {
std::cout << "Usage: xxxx.exe dicom_filename" << std::endl;
return 1;
}
const char *filename = argv[1];
gdcm::Reader reader;
reader.SetFileName(filename);
if (!reader.Read())
{
std::cerr << "Could not read: " << filename << std::endl;
return 1;
}
std::stringstream strm;
gdcm::File &file = reader.GetFile();
gdcm::DataSet &ds = file.GetDataSet();
gdcm::FileMetaInformation &fmi = file.GetHeader();
if (ds.FindDataElement(gdcm::Tag(0x10, 0x10))) {
const gdcm::DataElement &de = ds.GetDataElement(gdcm::Tag(0x10, 0x10));
std::cout << de << std::endl;
}
return 0;
}
1条答案
按热度按时间mlnl4t2r1#
感谢这条评论,我已经解决了这个问题。问题是第三方库没有正确构建。
在构建第三方库时,虽然我设置了
Project->Properties->General->Project Defaults->Configuration Type Static library (.lib)
,但也就是说我构建的是静态库。但是,我使用的是
Project->properties->C/C++->Code generation->Runtime Library to Multi-threaded DLL(/MD)
,当把它改成Multi-threaded (/MT)
时,一切都很好。