Я сейчас в раю линкеров.У меня есть библиотека C, которая компилируется только в Visual C ++ (вероятно, она работает в gcc), если:
- Я компилирую ее как код C ++
- Определить
__cplusplus
, что приводит ко всемобъявления заключаются в extern "C" { }
Итак, для этого у меня есть статическая библиотека с именем, скажем, bsbs.lib
Теперь у меня есть проект C ++ с именем Tester
который хотел бы вызвать функцию barbar
в объявленной в bsbs.h
.Все идет хорошо, пока я не попытаюсь связать с bsbs.lib
, где я получаю слишком знакомое:
Tester.obj : error LNK2001: unresolved external symbol _foofoo
И это всегда кажется foofoo
, который не может быть решен независимо от того, какую функцию япозвоните в Tester
(barbar
или что-нибудь еще).
Обновление: Я расширил пункт 2 в соответствии с просьбой.Большое спасибо за помощь, ребята!
#ifndef _BSBS_H
#define _BSBS_H
/* Prevent C++ programs from name mangling these definitions. */
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <setjmp.h>
.......
.......
#ifdef __cplusplus
}
#endif
#endif /* _BSBS_H */
Это, так сказать, "основной" заголовочный файл.Все важные функции здесь.Но есть и другие заголовочные файлы, вызываемые файлом bsbs.c
, которые не заключены в extern "C" {}
.
Решено: ОК, это довольно странно, ноЯ удалил бит extern C
из заголовочного файла в bsbs
, скомпилировал его как проект C ++ (хотя все файлы .c
и удалил определение __cplusplus
), и это сработало!Я получил идею после просмотра списка символов.Все было искажено , за исключением , которые были заключены в extern C
(до), и он просил разбитый символ, поэтому я подумал, что что-то не так.