編譯選項shared
編譯成動態庫用的。
② eclipse c/c++編譯時提示 shared library load failed
http://blog.csdn.net/iaiti/article/details/39344895
③ linux 怎麼編譯.so文件
.so是linux用的 所以 要生成so 需要用gcc 和生成可執行文件類似,只是增加一些編譯選項 命令如下 gcc SOURCE_FILES -fPIC -shared -o TARGET SOURCE_FILES可以是.c文件,也可以是經過-c編譯出來的.o文件 TARGET為so文件。
④ 如何初始化一個shared
如何初始化一個shared
第一句 #pragma data_seg("Shared") 創建一個稱為Shared 的新節。
第二句 int volatile g_lAppInstance =0 將 g_lAppInstance 放入Shared節中。注意此時只有將g_lAppInstance初始化,編譯器才會將其放入Shared節中,否則,將放入Shared以外的節。(實際上Visual C++ 編譯器提供了一個allocate 說明符,使我們可以將數據放到任何節中。)
第三句指示編譯器Shared 節結束。#pragma comment(linker,"/section:Shared,RWS")
這一句,我們使編譯鏈接器知道我們的Shared節具有讀,寫,共享的屬性。這是我們實現互斥運行的關鍵。這樣我們就可以在應用程序之間的多個實例之間共享g_lAppInstance 變數。
在InitInstance() 函數中加入:if(++g_lAppInstance>1) { AfxMessageBox("程序已經運行!"); return FALSE; }
以上代碼的作用是在程序是開始對g_lAppInstancd 加1 ,如果發現其值大於1,那麼顯示Message Box ,並返回FALSE。(注意:在MFC中如果InitInstance返回FALSE,程序將不會被運行!)
⑤ matlab怎麼生成動態鏈接庫
1>首先生成目標文件,但是此時要加編譯器選項-fpic和鏈接器選項-shared,
gcc -fpic -c add.c
gcc -fpic -c sub.c
生成中間文件add.o和sub.o
2>其次生成動態庫
gcc -shared –o libtiger.so add.o sub.o
生成動態庫libtiger.so,libtiger.so就是我們生成的目標動態庫。我們以後使用動態庫和main.c程序生成可執行程序
說明:
以上兩部也可以合成一步搞定:
gcc -fpic -shared add.c sub.c -o libtiger.so
2.使用動態鏈接庫
在編譯程序時,使用動態鏈接庫和靜態庫是一致的,使用」-l庫名」的方式,在生成可執行文件的時候會鏈接庫文件。
1>使用命令:
gcc -o main main.c -L ./ -ltiger
2>-L指定動態鏈接庫的路勁,-ldtiger鏈接庫函數tiger。-ltiger是動態庫的調用規則。Linux系統下的動態庫命名方式是lib*.so,而在鏈接時表示位-l*,*是自己命名的庫名。
3>但是程序會提示如下錯誤
error while loading shared libraries: libtiger.so: cannot open shared object file: No such file or direct
⑥ 編譯時加了-shared參數,編譯沒有錯誤,運行是沒進入main函數就出現了段錯誤,什麼原因
找個類似於objmp的反編譯花激羔刻薏灸割熏公抹工具,然後會生成匯編代碼,前面有地址,直接定位地址,然後往上找函數名。
⑦ 為什麼使用gcc hello.c -fpie -pie -shared -o hello 編譯出來
pie 選項用於編譯可執行程序,而非lib
⑧ linux中的--enable-shared 什麼意思
這是 configure 常用的一個參數,表示啟用動態庫版本。
如果你要編譯一個庫的源代碼,可以把它編譯成靜態庫,也可以把它編譯成動態庫。如果你想編譯成靜態庫,就用 --enable-shared參數;如果你想編譯成靜態庫,就用--enable-static參數。
⑨ 多個.c文件能編譯成單個.so文件嗎
可以的
一般是把多個.c文件 先分別編譯成.o文件
然後再把.o文件打包成.so
也可以直接編譯打包,一步完成。
命令如下
gcc SOURCE_FILES -fPIC -shared -o TARGET
SOURCE_FILES可以是.c文件,也可以是經過-c編譯出來的.o文件
TARGET為so文件。
比如
gcc a.c b.c c.c d.c -fPIC -shared -o libabcd.so
⑩ 我使用CUDA編程,在內核函數中定義了_shared_float A1[40];結果編譯說 identifier "_shared_" is undefine
1. 短橫少寫了一個。
2. 關於你說的重定義問題。這個我也碰到過。你的工程裡面是不是有個main函數所在的cu文件,還有個kernel函數所在的cu文件。你把你的kernel函數所在的cu文件,右鍵點屬性,將
exclude from build選成yes。再編譯一下看看。