談跨平台c 動態連線庫

2021-03-31 11:46:44 字數 2826 閱讀 8023

我對與

solaris ,hp ,windows

這三個平台的動態庫的實現,進行了探索,對於

soloaris,hp

等unix

平台來講,主要是

make

檔案的製作,而

windows

下還需要對類頭進行修飾.

本列主要實現了乙個動態庫和乙個呼叫動態庫的執行程式,動態庫包括

mytime.h ,mytime.cpp ,

在windows

下還需要

dllt1.cpp ,

這個包含動態庫的

dllmain

入口函式,

stdafx.cpp ,stdafx.h

是與預編譯相關的檔案

. 執行程式包括

dy.cpp

包括對動態庫的呼叫。

下面先談unix下的編譯指令.

一. hp平台下

在hp下使用hp自帶的acc編譯器

rm *.o

rm *.sl

acc +z mytime.cpp  //+z生成動態庫需要的*.o檔案

acc -b -o libmy.sl mytime.o   //-b生成動態庫 ,-o libmy.sl 表示生成動態庫的名稱為libmy.sl

acc dy.cpp libmy.sl        //用dy.cpp libmy.sl生成可執行程式,預設為a.out,也可以用 –o指定名稱

二. solaris平台下

在soloaris下用workshop帶的 cc .

cc -c mytime.cpp   //-c 生成動態庫需要的*.o檔案

cc -g -o libmy.so mytime.o  -b生成動態庫,名稱為libmy.so

cc -bdynamic -o myee libmy.so dy.cpp    //生成可執行程式myee

ln -s /export/home/hurh/tdll/libmy.so /lib    // solaris下在執行前要用root使用者配置動態庫libmy.so

下面再談談

windows

下的動態庫需要考慮的問題,用

vc編譯。

主要談動態庫標頭檔案

mytime.h

的宣告 #ifndef

mytime_h

#define

mytime_h

#ifndef

win32

#define

dllt_api

__declspec

(dllexport

)

#else

#ifdef

jesterdll

#define

dllt_api

__declspec

(dllexport

)

#else

#define

dllt_api

__declspec

(dllimport

)

#pragma

***ment(lib, "dllt1.lib")

#endif

#endif

struct

datetype

;

struct

timetype

;

int

dllt_api

getdate

(datetype*d

);

int

dllt_api

gettime

(timetype*t

);

class

dllt_api

gqlass

;

#endif 巨集

win32,

jesterdll

需要在動態庫編譯中用指令

–d 指定。

對於動態庫需要匯出的類或函式需要用修飾

__declspec

(dllexport

),而對於引用程式需要用

__declspec

(dllimport

) 修飾,這就是我們聯合

win32,

jesterdll

所達到的目的,

動態庫的名稱為

dllt1.dll

如果有了

#pragma

***ment(lib, "dllt1.lib")

就不需要在

make

檔案指定需要連線

dllt1庫了.

別的方面比較簡單,具體可以看附件

crossdll2.rar

====

沒有發現附件在何處貼,只好copy部分**在此

需要crossdll2.rar完整**email聯絡我

//mytime.cpp

#include"stdafx.h"

#include "time.h"

#include "mytime.h"

int getdate(datetype *d)

int gettime(timetype *t)

gqlass::gqlass()

gqlass::~gqlass()

void gqlass::setneid(int neid)

//dy.cpp

#include"stdafx.h"

#include "stdio.h" 

#include "../dllt1/mytime.h" 

int main()

談跨平台C 動態連線庫的實現

我對與solaris hp windows這三個平台的動態庫的實現,進行了探索,對於soloaris,hp等unix平台來講,主要是make檔案的製作,而windows下還需要對類頭進行修飾.本列主要實現了乙個動態庫和乙個呼叫動態庫的執行程式,動態庫包括mytime.h mytime.cpp 在wi...

談跨平台C 動態連線庫的實現

我對與solaris hp windows這三個平台的動態庫的實現,進行了探索,對於soloaris,hp等unix平台來講,主要是make檔案的製作,而windows下還需要對類頭進行修飾.本列主要實現了乙個動態庫和乙個呼叫動態庫的執行程式,動態庫包括mytime.h mytime.cpp 在wi...

使用gmodule 跨平台動態載入庫

使用gmodule 跨平台動態載入庫 the function signature for say hello typedef void sayhellofunc const char message gboolean just say hello const char filename,gerro...