FILES DERLENIRKEN HATA

34istanblue

Level 6
Katılım
19 Ağu 2010
Konular
272
Mesajlar
1,059
Online süresi
12g 11711s
Reaksiyon Skoru
40
Altın Konu
0
Başarım Puanı
189
TM Yaşı
15 Yıl 8 Ay 7 Gün
MmoLira
2,926
DevLira
0

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Merhabalar,

Lorenzo'nun filesını derlemek istediğimde ekte görülen hatayı almaktayım. Konu ile ilgili olarak yardımcı olabilecek var mı ?


[ LORENZO WORKS ] [GAME DERLENIYOR]: shopEx.cpp
[ LORENZO WORKS ] [GAME DERLENIYOR]: item_manager_read_tables.cpp
[ LORENZO WORKS ] [GAME DERLENIYOR]: shutdown_manager.cpp
[ LORENZO WORKS ] [GAME DERLENIYOR]: questlua_dnd.cpp
[ LORENZO WORKS ] [GAME DERLENIYOR]: NewBattlePass.cpp
[ LORENZO WORKS ] [GAME DERLENIYOR]: minilzo.c
[ LORENZO WORKS ] [GAME DERLENIYOR]: main.cpp
Game Derlendi /home/main/srv1/share/bin/game_r41094...
/usr/local/bin/ld: /usr/local/lib/mysql/libmysqlclient.a(client.c.o): in function `send_client_reply_packet':
client.c.text+0x601c): undefined reference to `SSL_get_peer_certificate'
/usr/local/bin/ld: /usr/local/lib/mysql/libmysqlclient.a(my_aes_openssl.cc.o): in function `my_aes_encrypt':
my_aes_openssl.cc.text+0x60): undefined reference to `EVP_CIPHER_iv_length'
/usr/local/bin/ld: /usr/local/lib/mysql/libmysqlclient.a(my_aes_openssl.cc.o): in function `my_aes_decrypt':
my_aes_openssl.cc.text+0x224): undefined reference to `EVP_CIPHER_iv_length'
/usr/local/bin/ld: /usr/local/lib/mysql/libmysqlclient.a(my_aes_openssl.cc.o): in function `my_aes_get_size':
my_aes_openssl.cc.text+0x2fe): undefined reference to `EVP_CIPHER_block_size'
/usr/local/bin/ld: /usr/local/lib/mysql/libmysqlclient.a(my_aes_openssl.cc.o): in function `my_aes_needs_iv':
my_aes_openssl.cc.text+0x33a): undefined reference to `EVP_CIPHER_iv_length'
collect2: error: ld returned 1 exit status
gmake[1]: *** [Makefile:204: /home/main/srv1/share/bin/game_r41094] Error 1
gmake[1]: Leaving directory '/home/src/Server/game/src'
gmake: *** [Makefile:111: all] Error 2
root@Kralbenimmmm:/home/src/Server #
root@Kralbenimmmm:/home/src/Server #
 
Son düzenleme:
Çözüm
Hayrına yardımcı olabilecek biri varsa çok sevinirim
Merhabalar,

Aldığın hata derlemeden ziyade link aşamasında çıkıyor ve doğrudan Metin2 server source’larında MySQL–OpenSSL uyumsuzluğunu işaret ediyor. Kodlar derlenmiş gibi görünüyor ama en sonda game binary’si oluşturulurken MySQL client kütüphanesi, ihtiyaç duyduğu OpenSSL fonksiyonlarını bulamıyor.

Log’da geçen şu satırlar bunun göstergesi:

undefined reference to `SSL_get_peer_certificate'
undefined reference to `EVP_CIPHER_iv_length'
undefined reference to `EVP_CIPHER_block_size'

Bu hatalar genelde MySQL’in kullandığı libmysqlclient.a dosyasının OpenSSL’e bağlı olmasına rağmen, derleme sırasında OpenSSL kütüphanelerinin linklenmemesinden kaynaklanır. Yani...
Hayrına yardımcı olabilecek biri varsa çok sevinirim
Merhabalar,

Aldığın hata derlemeden ziyade link aşamasında çıkıyor ve doğrudan Metin2 server source’larında MySQL–OpenSSL uyumsuzluğunu işaret ediyor. Kodlar derlenmiş gibi görünüyor ama en sonda game binary’si oluşturulurken MySQL client kütüphanesi, ihtiyaç duyduğu OpenSSL fonksiyonlarını bulamıyor.

Log’da geçen şu satırlar bunun göstergesi:

undefined reference to `SSL_get_peer_certificate'
undefined reference to `EVP_CIPHER_iv_length'
undefined reference to `EVP_CIPHER_block_size'

Bu hatalar genelde MySQL’in kullandığı libmysqlclient.a dosyasının OpenSSL’e bağlı olmasına rağmen, derleme sırasında OpenSSL kütüphanelerinin linklenmemesinden kaynaklanır. Yani sorun Lorenzo files’ta ya da eklediğin sistemlerde değil, tamamen kütüphane tarafında.

Kontrol etmen gereken noktalar şunlar:

Öncelikle sistemde OpenSSL kurulu mu ve düzgün çalışıyor mu bak. openssl version komutu ile sürümü kontrol et. MySQL’in derlendiği OpenSSL sürümüyle sistemdeki sürüm çok alakasızsa bu tip hatalar çıkabiliyor.

Game source içindeki Makefile’ı açıp, kütüphanelerin eklendiği kısımda OpenSSL linkleri var mı kontrol et. Çoğu zaman şu satırlar eksik oluyor:

-lssl -lcrypto

Bunlar eklenmeden statik MySQL client kullanıldığında ld bu hataları veriyor.

Bir diğer ihtimal, sistemde birden fazla MySQL / MariaDB client bulunması. /usr/local/lib/mysql/libmysqlclient.a dosyasının gerçekten kullandığın MySQL sürümüne ait olduğundan emin ol. Yanlış sürümden gelen bir client da aynı hatayı üretir.

Eğer MariaDB kullanıyorsan, bu files’larda daha sık sorun çıkabiliyor. Lorenzo’nun files’ları genelde klasik MySQL’e göre hazırlanmış oluyor. Bu durumda ya uyumlu bir MySQL sürümüne geçmek ya da Makefile’ı MariaDB + OpenSSL uyumuna göre düzenlemek gerekiyor.

Kısacası:
Bu hata kodsal değil, tamamen MySQL client + OpenSSL link problemi. Doğru OpenSSL sürümü ve Makefile’a eklenen -lssl -lcrypto ile genelde sorunsuz şekilde derleme tamamlanıyor.

Kullandığın sistem (FreeBSD/Linux sürümü, MySQL ya da MariaDB versiyonu) bilgisini paylaşırsan, daha net bir yol da çizilebilir.
 
Çözüm
Merhabalar, cevabınız ve bilgilendirmeniz için çok teşekkür ederim. Freebsd 14.0 (Enix'in paylaştığı) 13.3 ve 13.1 sürümlerinde bu durum ile karşı karşıya kaldım.
 
Merhabalar, cevabınız ve bilgilendirmeniz için çok teşekkür ederim. Freebsd 14.0 (Enix'in paylaştığı) 13.3 ve 13.1 sürümlerinde bu durum ile karşı karşıya kaldım.
Makefile dosyasının içeriğini buraya atar mısınız rica etsem?
 

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)