編譯動態鏈接的子程序
1. 易語言 編譯動態鏈接庫時至少必須提供一個被公開的子程序。
來張圖片

選中即可,一個dll文件內至少有1個或1個以上公開的子程序,如果沒公開的則其他程序無法調用。
2. c語言怎麼編寫動態鏈接庫
編寫動態鏈接庫的過程
其實和編寫普通C程序差不多少
只不過
把一個整體的C程序,摘出來一部分, 放在獨立的一個或者幾個C文件中
再把這些C文件打包成dll或者so文件而已。
所以寫法上沒有特別的
需要注意的是編譯。
如果是windows,最好用IDE,創建的時候選動態鏈接庫
如果是gcc, 那麼編譯的時候 增加編譯選項 -fPIC -shared即可。
3. 動態鏈接庫的作用
就是一個DLL庫,裡面都是函數。
比方說一個程序要算2的100次方,正好庫里有這個函數,它就直接調用。
如果沒有,這個程序就不能運行。道理是這個。
4. 怎樣將自己做的動態鏈接庫「靜態」編譯到可執行文件里
舉例文件:add.c
gcc -fPIC -c add.c /生成.o文件
gcc -shared add.o -o libmath.so /載入add.o到math動態庫
gcc test.c -L. -Lmath /test.c 為主程序
另外;配置動態庫載入器環境變數:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
5. 如何編譯C/Fortran動態/靜態鏈接庫
首先,傳統的編譯,也就是靜態編譯是把 源文件 翻譯成目標文件,這個是一次性過程,也就是你所謂的靜態編譯。
後來的Java和.NET等語言,首先編譯成中間形式,然後運行過程中根據需要編譯成本地代碼(注意這個過程不是一次性的,下次運行重新編譯),這個就是JIT(即時編譯)技術,從即時編譯發展出了動態編譯技術
————————————
(傳統的)編譯完成後,像C/C++、Fortran、匯編等語言,可以把多個目標文件合並到一個庫文件中,這個就是靜態庫。比如常說的庫函數printf就是libc裡面的函數。
如果有了啟動函數(main),main裡面使用了printf,就可以通過靜態鏈接技術,從libc中提取出printf所在的文件加入到可執行文件中,如果printf還需要其它函數,就繼續搜索並加入列表,直到形成一個閉包。這個就是靜態鏈接。
可是靜態鏈接有個明顯的缺點,如果每個程序都需要printf,那麼printf這個函數的代碼就會同時存在在每個程序中,這樣也太佔地方了吧。所以發明了動態連接技術,其實有兩種形式。無論哪一種,都是首先記錄下需要調用printf這個函數以及所在的動態庫,等到運行的時候再載入動態庫,從動態庫中找到真正的printf去執行。
由於,動態鏈接技術需要一些額外的信息,傳統的靜態庫是不具備的,這些額外信息主要是重復載入和卸載時所需要的一些代碼,因此需要動態鏈接庫。
6. c++動態鏈接的聲明和實現函數 怎麼做成動態鏈接庫
你要建立dll的工程項目,如果是建立動態鏈接庫的話,我可以發給你一個模板,請參考。
.cpp
#define DLL_ALGRATHM
#include "algrithmdll.h"
//從內存中讀取圖像數據
DLL_API IplImage* WINAPI loadimage( char* data,float width,float height)
{
}
.h文件
#pragma once;
#ifdef DLL_ALGRATHM
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
#include <Windows.h>extern "C" {
DLL_API IplImage* WINAPI loadimage(char* data,float width,float height);
}
7. 易語言動態鏈接庫程序已公開,編譯卻提示需要提供公開子程序
.版本 2
.子程序 _臨時子程序
本名稱子程序用作測試程序用,僅在開發及調試環境中有效,編譯發布程序前將被系統自動清空,請將所有用作測試的臨時代碼放在本子程序中。 ***注意不要修改本子程序的名稱、參數及返回值類型。
說明你沒去看說明,你的代碼要放在新建的子程序中。
