我正在尝试从DXC竞赛中编译c ++源代码文件。
说明如下:
在Windows,MS下编译任何C ++示例(或用C ++编写的DA) Visual C ++ 8.0(2005)是必需的。确保添加%DXC_HOME%\ Lib和 %DXC_HOME%\分别包含到您的库和标题搜索路径中,然后添加 dxcApi.lib到您的库列表(如果在debug中编译,则为dxcApid.lib) 模式)。
我将Lib和Include库添加到库和搜索路径中并导入它们。我不明白的是第二步的含义:“将dxcApi.lib添加到您的库列表” - 这是什么意思?
如果没有这一步,我会收到链接器错误,例如:
错误1错误LNK2019:未解析的外部符号 “__declspec(dllimport)public:_ thiscall DXC ::候选集::〜候选集(空)” ( _imp _ ?? 1CandidateSet @ Dxc @@ QAE @ XZ)在函数“public中引用: void __thiscall ExampleDA :: sendDiagnosis(void)“ (?sendDiagnosis @ ExampleDA @@ QAEXXZ)D:\ Dropbox \ Work \ Visual Studio 2010 \ Projects \ DXC11 \ DXC11 \ ExampleDA.obj DXC11
我已经坚持这个问题很长一段时间了,我迫切需要帮助! 非常感谢
答案 0 :(得分:2)
您需要将特定的lib
文件添加到库列表中,以便链接器可以在其中搜索您缺少的符号。
答案 1 :(得分:2)
该任务表示将该特定.lib添加到链接到您的代码的库列表。不说这个库应该被链接,链接器不能使用其头文件中定义的函数的实现,并且你得到了未解析的外部符号。
在VS中,您可以通过#pragma comment
或项目设置向链接库列表添加内容:
// at the top of main.cpp, preferrably
#pragma comment(lib, "the_lib_name.lib") // .lib optional
您可以使用不同的库进行调试和发布,只需围绕#pragma comment
块中的#if
:
#ifdef NDEBUG // release
#pragma comment(lib, "the_lib_name.lib")
#else // debug
#pragma comment(lib, "the_lib_named.lib") // most debug libraries end with a 'd'
#endif
对于项目设置,您可以使用
进行设置[Project] -> <Project Name> Properties (or Alt-F7) -> Configuration Properties
-> Linker -> Input -> Additional Dependencies
只需在前面添加the_lib_name.lib
(后跟空格或分号;
)。确保为活动项目配置添加正确的库(调试/发布)。