2016-01-08 100 views
0

我有一個C程序hello.c。我創建了一個共享對象hello.so。AIX中的共享對象加載?

的hello.c和hello.so /u/grv/objects/hello.so分別

LIBPATH設置爲/ U/GRV /對象是在目錄/u/grv/program/hello.c: $ LIBPATH

當我使用dbx調試code..dbx問我從兩個列表,以便..

在LIBPATH的所有目錄,選擇只有一個「hello.so」文件。 .so這個secound「so」文件是從哪裏來的?

這裏是dbx會話的屏幕截圖:

(dbx) stop on load "hello.so" 
[1] stop on load "hello.so" 
(dbx) c 
stop: loaded /u/grv/object/hello.so 
[1] stopped in uload at 0x9fffffff0002024 ($t1) 
0x9fffffff0002024 (uload+0x104) e8410028   ld r2,0x28(r1) 
(dbx) stop in hello 
1. hello.hello 
2. glink64.hello 
Select one or more of [1 - 2]: 

其他信息: genkld命令不會在hello.so ..這意味着它不是loaded..is這究竟是爲什麼它是問我的原因選擇..或者還有其他原因..?

如何加載共享對象,以便它顯示在genkld列表中?

+0

什麼你真的想實現嗎?創建一個自己運行它的共享對象? –

+0

我只是好奇爲什麼有兩個這樣的..但我只有這樣.. – Grv

+0

沒錯,只有一個'hello.so',但有兩個'你好'_symbol._也試試這個:'info sh' (它在gdb中工作,對dbx不知道)。 –

回答

0

很明顯,庫glink64也包含一個入口點,稱爲hello

你可以嘗試從hello改變功能名稱的東西更獨特的,然後讓你的應用程序調用這個新的獨特的功能名稱

我不熟悉的genkld實用所以幫不了你那裏