visual studio项目依赖于另一个项目LINKING失败

ale*_*cci 5 c++ linker dependencies visual-studio-2010

我有一个包含2个项目cira_lib和md5_test的解决方案.一个项目(cira_lib)是一个编译为DLL的中央库.另一个项目(md5_test)是一个依赖于cira_lib的exe.当我构建md5_test时,它首先构建cira_lib,所以我知道正在遵循项目依赖项.但是当VC++链接到md5_test时,会返回一个链接器错误:

1>  win32_cira.vcxproj -> C:\Users\ale-xps\Documents\Visual Studio 2010\Projects\win32_cira\Release\cira_lib.dll
2>------ Rebuild All started: Project: md5_test, Configuration: Release Win32 ------
2>  MD5Test.cpp
2>MD5Test.obj : error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl getTimeChkSum(void)" (?getTimeChkSum@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
2>C:\Users\ale-xps\Documents\Visual Studio 2010\Projects\win32_cira\Release\md5_test.exe : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

您看到的"未解析的外部符号"是cira_lib项目中某个类文件"Utils.cpp"中的函数.所以在我看来,Visual Studio需要我执行一些额外的步骤才能从cira_lib中查看Object文件?我认为通过制造一个"依赖",所有这些都将自动照顾我?

我希望md5_test能够动态地链接到cira_lib ...但我认为微软要求你至少在链接时链接存根.LIB文件,即使你正在执行动态链接,这是正确的吗?

那么我需要将cira_lib的Release目录添加到md5_test的"Library Directories"并将cira_lib.lib添加到md5_test的"Linker Input"吗?

我正在导出的头文件如下

 __declspec( dllexport ) string getTimeChkSum( );
Run Code Online (Sandbox Code Playgroud)

而实现文件是

__declspec(dllexport)
string  getTimeChkSum( )
{...}
Run Code Online (Sandbox Code Playgroud)

即使在添加这些指令并重建所有内容后,我的exe项目仍然无法看到这些符号.

Seb*_*ose 2

只有您专门标记为导出的符号才可用于链接到您的 DLL 的可执行文件。

你应该检查MSDN文档