2014-12-22 19 views
6

Tanımsız başvurusu arm-linux-gnueabi-g ++ sürüm 4.7.3 kullanarak derliyorum. ,'dlsym' ve 'dlopen'

/usr/kol-linux-gnueabi/lib, içerdiği libdl.a, libdl.so, libdl.so.2:

Ben yerde kurulu kol-linux-gnueabi kütüphaneleri var ve libdl-2.19.so.

libdl.so.2 libdl.de.2 linkleri libdl-2.19.so için bağlantılar.

Dl kitaplığına karşı bağlantı kurmaya çalışıyorum (aşağıdaki komut dizesine bakın), ancak her zaman tanımsız başvuru hatalarını alıyorum.

arm-linux-gnueabi-g++ -I. -I../ -I../Comms/Linux -Wall -DLINUX -fpic -o ../../work/MyProgram main.o 
-L../../work -L/usr/arm-linux-gnueabi/lib -lComms -lConsole -lUtilities -ldl 
../../work/libUtilities.so: undefined reference to `dlsym' 
../../work/libUtilities.so: undefined reference to `dlopen' 
collect2: error: ld returned 1 exit status 

o zaman benim programı aşağıdaki övmek kullanarak gr ++ 4.8.2 kullanarak Derleyen ise derler bağlantıları ve ince yürütür.

g++ -I. -I../ -I../Comms/Linux -Wall -DLINUX -fpic -o ../../work/MyProgram main.o 
-L../../work -lComms -lConsole -lUtilities -ldl 

Açıkçası libdl.so kitaplığını bulamıyor; -L bayrağı kullanarak uygun kitaplığın yerini yolunu ekleyerek sorunu gidermek düşündüm, ama değil.

ARM derleyici komutunda ne eksik durum var?

+0

olası yinelenen (http://stackoverflow.com/questions/20369672/undefined-reference-to-dlsym) –

cevap

10

Cevabı buldum, -ldl'dan önce -Wl,--no-as-needed bayrağına ihtiyacım vardı. Soruyu sormadan önce bu bayrakla koştum, ama görünüşe göre yanlış anlaşıldı çünkü benim için çalışmadı.

Bayrak neden gerekli olduğunu anlamıyorum, ancak kod şimdi bağlantıyı bitirir. Bir SO kullanıcısı here, bir SO kullanıcısı - (kullanıcı sürümünden sonra 2013) ile ilgili olarak, gcc'nin --as-need'a bağlanan sürümleri ile ilgili olduğunu belirtmektedir. [ 'Dlsym' için Tanımsız referans] arasında

+0

Sen bana teşekkür çok zaman kurtardı. –

İlgili konular