связывание библиотеки C ++, так как она вызывается как C - PullRequest
0 голосов
/ 09 февраля 2011

Я действительно не эксперт в C / C ++. Магия ссылок.Ни g ++, ни Cygwin, скорее новичок.

Представьте, что у меня есть исполняемый файл (в моем случае Apache Server), который принимает библиотеку C в качестве модулей.например, скомпилированный файл libMyServer.so

Если я делаю кодирование кишок на C ++ и экспортирую только ванильные функции , например статические функции-члены классавызвать CExportToC ... если я сделаю это, магия компоновки сделает мою библиотеку libMyServer доступной из программы, запрашивающей библиотеки C?

1 Ответ

2 голосов
/ 09 февраля 2011

Вы не делаете этого во время компоновки, вы объявляете компилятору не искажать имена при генерации кода (что, конечно, не допускает перегрузок). Поместите объявления вещей, которые вы хотите показать C, в блок extern "C" { ... }. Смотрите, например FAQ . Занятиям здесь в значительной степени не повезло, если вы не готовы много работать и жить с PITA. И даже тогда один автор компилятора может сломать ваш код (способами, которые будут отображаться только в ошибках времени выполнения, а не в ошибках компиляции).

...