У меня есть решение с 2 проектами cira_lib и md5_test. Один проект (cira_lib) - это центральная библиотека, которая компилируется в DLL. Другой проект (md5_test) - это исполняемый файл с зависимостью от cira_lib. Когда я собираю 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
«Неразрешенный внешний символ», который вы видите, является функцией в одном из файлов классов «Utils.cpp» в проекте cira_lib. Таким образом, мне кажется, что Visual Studio требует от меня выполнения некоторых дополнительных шагов, чтобы увидеть файлы объектов из cira_lib? Я думал, что, сделав «зависимость», все, что будет автоматически заботиться обо мне?
Я хочу, чтобы md5_test динамически связывался с cira_lib ... но Я думаю, Microsoft требует от вас по крайней мере ссылки на файл stub .LIB во время ссылки, даже если вы выполняя динамическое связывание, это правильно?
Так что мне нужно добавить каталог Release cira_lib в "Библиотечные каталоги" md5_test и добавить cira_lib.lib в "Вход для компоновщика" md5_test?
Файл заголовка, который я экспортирую, выглядит следующим образом
__declspec( dllexport ) string getTimeChkSum( );
и файл реализации
__declspec(dllexport)
string getTimeChkSum( )
{...}
Даже после добавления этих директив и перестройки всего, мой exe-проект все еще не видит эти символы ..