Добавить «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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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