64位linux下編譯32位程序命令: gcc -m32 test.c -o test32
64位linux下編譯64位程序命令: gcc -m64 test.c -o test64
64位linux下編譯32位 .o 命令:gcc -m32 -c test.c
64位linux下編譯64位 .o 命令:gcc -m64 -c test.c
64位linux下編譯32位靜態庫命令:ar cr libt32.a sotest.o
64位linux下編譯64位靜態庫命令:ar cr libt64.a sotest.o
64位linux下編譯32位動態庫命令:gcc -m32 -g -Wall -shared -fPIC sotest.c -o libt32.so
64位linux下編譯64位動態庫命令:gcc -m64 -g -Wall -shared -fPIC sotest.c -o libt64.so
64位linux下編譯32位調用動態庫程序命令: gcc -m32 test.c -L./ -lt32 -o t32 或者 gcc -m32 test.c libt32.so -o t32 兩者效果一樣
64位linux下編譯64位調用動態庫程序命令: gcc -m64 test.c -L./ -lt64 -o t64 或者 gcc -m64 test.c libt64.so -o t64 兩者效果一樣
查看靜態庫導出函數: nm -s *.a
查看.a庫文件位數:objdump -a *.a
查看.so庫文件位數:objdump -a *.so或者file *.so
-----------------------------------------------------------------------------------------------------------------------
64位Aix下編譯32位程序命令: gcc -maix32 test.c -o test32
64位Aix下編譯64位程序命令: gcc -maix64 test.c -o test64
64位linux下編譯32位 .o 命令:gcc -m32 -c test.c
64位linux下編譯64位 .o 命令:gcc -m64 -c test.c
64位Aix下編譯32位靜態庫命令ar cr libt32.a *.o
64位Aix下編譯64位靜態庫命令ar -X64 cr libt64.a *.o
64位Aix下編譯32位動態庫命令:gcc -maix32 -g -Wall -shared -fPIC sotest.c -o libt32.so
64位Aix下編譯64位動態庫命令:gcc -maix64 -g -Wall -shared -fPIC sotest.c -o libt64.so
64位Aix下編譯32位調用動態庫程序命令: gcc -maix32 test.c libt32.so -o t32
64位Aix下編譯64位調用動態庫程序命令: gcc -maix64 test.c libt64.so -o t64
查看32位靜態庫導出函數: nm *.a
查看64位靜態庫導出函數: nm -X64 *.a
查看.so庫文件位數: file *.so
-----------------------------------------------------------------------------------------------------------------------
64位linux編譯32程序時錯誤提示:/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h:No such file or directory
# yum -y install glibc-devel.i386
1、64爲linux編譯如果不帶m64參數編譯出來的程序依然爲64位
2、編譯目錄下執行export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH,可解決找不到當前目錄so庫的問題
3、64位程序在頭文件定義加上 #pragma pack(4) 表示結構體以四個字節對齊 ,否則可能會出現一個包含Int類型的結構體 int類型和緊挨的一個類型 間隔8個字節的情況
顯式調用時不要在MakeFile中加"-l庫名稱",直接dlopen 然後獲取函數地址調用即可。
隱式鏈接時需要包含頭文件加上"-l庫名稱",直接可以調用了。
靜態鏈接時需要包含頭文件加上"-l庫名稱",這時的庫應該爲.a庫。