Добавить «extern C» в качестве опции компилятора для символа?C++

Программы на C++. Форум разработчиков
Anonymous
Добавить «extern C» в качестве опции компилятора для символа?

Сообщение Anonymous »

Я работаю с OpenSSL с поддержкой FIPS. Исходный код изолирован и не может быть изменен.

Чтобы создать ссылку на статическую версию библиотеки OpenSSL, все, что нам нужно сделать, это:

Код: Выделить всё

export FIPS_SIG=`find /usr/local/ssl -iname incore`
export CC=`find /usr/local/ssl -iname fipsld`
export FIPSLS_CC=`find /usr/bin -iname gcc`
Затем просто выполните:

Код: Выделить всё

$CC $CFLAGS  -o myprogram 
Причина изменения заключается в том, что OpenSSL вставит дополнительный исходный файл — fips_premain.c — и скомпилирует его с исходными кодами программы. (Происходят некоторые дополнительные шаги, но компиляция fips_premain.c является подходящим шагом).

Однако при использовании g++ пара символов не определены, поскольку они были скомпилированы компилятором C при установке OpenSSL, и g++ не может найти их при вызове, как указано выше:

Код: Выделить всё

/tmp/fips_premain-20db15.o: In function `FINGERPRINT_premain()':
/usr/local/ssl/fips-2.0/lib/fips_premain.c:103: undefined reference to `FIPS_text_start()'
/usr/local/ssl/fips-2.0/lib/fips_premain.c:116: undefined reference to `FIPS_incore_fingerprint(unsigned char*, unsigned int)'
Если я добавлю параметр компоновщика --no-demangle, вот что будет выведено:

Код: Выделить всё

/tmp/fips_premain-be4611.o: In function `_Z19FINGERPRINT_premainv':
/usr/local/ssl/fips-2.0/lib/fips_premain.c:103: undefined reference to `_Z15FIPS_text_startv'
/usr/local/ssl/fips-2.0/lib/fips_premain.c:116: undefined reference to `_Z23FIPS_incore_fingerprintPhj'
Вот интересующие строки в fips_premain.c (около строки 85):

Код: Выделить всё

extern const void         *FIPS_text_start(),  *FIPS_text_end();
extern const unsigned char FIPS_rodata_start[], FIPS_rodata_end[];
extern unsigned char       FIPS_signature[20];
extern unsigned int        FIPS_incore_fingerprint(unsigned char *,unsigned int);
Есть ли способ пометить символ как внешний «C» из командной строки?

Подробнее здесь: https://stackoverflow.com/questions/222 ... r-a-symbol

Вернуться в «C++»