На Ubuntu 10.04 LTS:
/usr/bin/g++ -> g++-4.4
/usr/bin/gcc -> gcc-4.4
Я пишу библиотеку libssl_ext в Ubuntu, которая основана на библиотеке openssl (libssl.a и libssl.so)
Когда я печатаю
$nm -C -defined-only -g libssl_ext.so
Я вижу следующие символы, определенные
00005140 D SSLv3_enc_data_Ext
**00002800 T SSLv3_server_method_Ext**
00005174 A __bss_start
00005174 A _edata
0000517c A _end
00003aa8 T _fini
00001954 T _init
00002d70 T ssl3_accept_Ext
00002480 T ssl3_enc_Ext
00002850 T ssl3_get_client_key_exchange_Ext
000026f0 T ssl3_write_Ext
00002320 T ssl3_write_bytes_Ext
Когда я печатаю:
$nm -C -defined-only -g libssl.so
Я вижу следующие символы, определенные
....
00018930 T SSLv3_client_method
00050600 D SSLv3_enc_data
00013640 T SSLv3_method
**00013690 T SSLv3_server_method**
00026f40 T TLSv1_client_method
000506c0 D TLSv1_enc_data
00026ea0 T TLSv1_method
00026ef0 T TLSv1_server_method
.....
Когда я вызываю SSLv3_server_method_Ext в моем коде server.cpp, возникает проблема:
server.cpp:70: undefined reference to SSLv3_server_method_Ext()
Когда я печатаю:
$ nm -C --undefined-only -g server.o
Это показывает следующее:
U CRYPTO_free
U ERR_print_errors_fp
U SSL_CIPHER_get_name
U SSL_CTX_ctrl
U SSL_CTX_free
U SSL_CTX_new
U SSL_CTX_set_cipher_list
U SSL_accept
U SSL_free
U SSL_get_current_cipher
U SSL_get_error
U SSL_get_peer_certificate
U SSL_get_version
U SSL_library_init
U SSL_new
U SSL_read
U SSL_set_fd
U SSL_shutdown
U SSL_write
**U SSLv3_server_method**
U X509_NAME_oneline
U X509_free
**U SSLv3_server_method_Ext()**
U __gxx_personality_v0
U accept
U bind
U close
U exit
U htons
U inet_ntoa
U listen
U memset
U perror
U printf
U puts
U socket
U stderr
Есть разница, когда я связываю SSLv3_server_method от libssl.so
с server.o, он отображается как «U SSLv3_server_method» и может быть успешно связан с libssl.so.
Но когда я связываю SSLv3_server_method_Ext из libssl_ext.so с server.o, он отображается как «U SSLv3_server_method_Ext ()» и завершился ошибкой с неопределенной ссылкой на SSLv3_server_method_Ext ()
Пожалуйста, если кто-то объяснит мне почему server.o ищет SSLv3_server_method_Ext () вместо SSLv3_server_method_Ext и как исправить эту проблему? Компоновщик правильно искал SSLv3_server_method, когда я вызываю libssl.so, и он найден.
Задача ещё не решена.
Других решений пока нет …