Как собрать приложение с предварительно скомпилированной библиотекой в ​​Visual Studio - PullRequest
1 голос
/ 15 марта 2012

Я работаю с предварительно скомпилированной библиотекой (.lib), которую я написал в Visual Studio 2010. У моего решения есть два проекта.Первый проект (C) строит библиотеку.Второй проект (C ++) - консольное приложение Win32, предназначенное для тестирования библиотеки.Все, что я пробовал, не разрешает ошибки компоновщика.(Я думал, что это будет легко, потому что все в одном решении.) Любые указатели будут оценены.Спасибо.

Вот полученная мной ошибка компоновщика:

1> MyProject.obj: ошибка LNK2019: неразрешенный внешний символ "void __cdecl my_function (void)" (? My_function@@ YAXXZ) упоминается в функции _wmain

1> C: \ Documents and Settings \ user \ Desktop \ MySolution \ Debug \ MyProject.exe: фатальная ошибка LNK1120: 1 неразрешенный внешний код

Это код для консольного приложения Win32:

#include "stdafx.h"
#include "my_api.h"

int _tmain(int argc, _TCHAR* argv[])
{
  my_function();

  return 0;
}

Вот как my_function объявлено в my_api.h:

extern VOID my_function(VOID);

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Вам необходимо объявить вашу функцию с помощью C linkage , чтобы компоновщик понял, что эти функции были определены в коде C, а не в коде C ++:

// my_api.h
#ifdef __cplusplus
extern "C" {
#endif

extern VOID my_function(VOID);
// more function declarations etc.

#ifdef __cplusplus
}
#endif

Если вы толькоесть одна функция, вы можете сбросить скобки:

// my_api.h
#ifdef __cplusplus
extern "C"
#endif
extern VOID my_function(VOID);
1 голос
/ 15 марта 2012

Убедитесь, что выходной каталог проекта библиотеки (независимо от того, что $(OutDir) расширяется в этом проекте) находится в пути поиска компоновщика для тестового проекта. Для этого перейдите в диалог свойств проекта. В Linker -> General убедитесь, что каталог установлен в Additional Library Directories. Кроме того, убедитесь, что в Linker -> Input указана сама библиотека (my_api.lib) в Additional Dependencies.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...