ACE網管平台移植Linux

2021-04-17 16:10:18 字數 3144 閱讀 2644

我們的網管平台基於ace, odbc,snmp ++的,都是可以跨平台的庫,但一直未進行linux下的編譯測試,這是去年移植測試時記錄的日誌。

注意移植前先要編譯好ace, unixodbc,snmp ++的庫。

在從vc下移植到linux(用gcc編譯)過程中記錄的一些更改項:

1)微軟windef.h檔案中定義的內容linux下不可用,包括

#define max_path

260別的還有

#define dword unsigned int

#define lpvoid void*

2)用到的ace中和nt有關的

ace_nt_service

這些東西即使是win32下其實也沒有起作用,直接遮蔽

3)微軟winsvc.h檔案中定義的內容

#define service_control_shutdown

0x00000005

.....

這些東西即使是win32下其實也沒有起作用,直接遮蔽

4)有些大小寫有關係了, 還有include後面必須用/而不是/

#include "ace/os.h"

#include "ace/task.h"

#include "dbaccess1.h"

#include "include/v3.h"

#include "include/snmpmsg.h"

// asn serialization class

#include "include/vb.h"

#include "include/oid_def.h"

5)有些語法細節gcc不允許

ace_debug((lm_info, ace_text("%d preparing to rebuild db connection "

"pool(%d)! : %t/n"), iconnpoolsize));

那個換行的第二個"必須放到第二行

6)每個檔案結尾都要回車,不然編譯會告警

warning: no newline at end of file

7)gcc不允許過期繫結(vc下是可以通過編譯的)

for (int i = 0;i < 6;i++)

。。。for (i = 0;i < 128;i++)

8)warning: "null" redefined

9)linux(gcc)下函式至少返回void,vc下不是必須的

10) 登錄檔部分只能在windows中用(查詢資料庫型別)

改用sqlgetinfo讀資料庫型別

11)formatmessage這是mfc cstring的東東(comm.cpp 裡面得debug_info函式)

12)linux下用真實ip得出來的主機名和用127.0.0.1或0.0.0.0(預設)得出來得不一樣

ace_inet_addr addr1(port, szaddr);//初始化,注意第二個引數填真實ip和"127.0.0.1"的區別

addr1.get_host_name();//獲得主機名

13)常量字串不能直接轉給char*

sztemp = (sztemp==0||strlen(sztemp)<1)?" ":sztemp;

14)linux不支援:itoa

strrev   strnicmp(不管大小寫的比較) stricmp strset sleep

其中itoa用ace_os::itoa代替(strrev也就不用了),可以用以下函式模擬實現或轉換成linux下的函式

#if

defined(__linux__)

#define

max_path

260

#define

dword

unsigned

int

#define

lpvoid

void*

#define

strnicmp

strncasecmp

#define

stricmp

strcasecmp

typedef unsigned

char

byte;

typedef unsigned

short

word;

#define

__strrev

strrev

char

* strrev

(char

* szt)

return

szt; }

#define

_itoa

itoa

char

* itoa

(int

value

, char

* str

, int

radix)

} }

if(

'!'== ch)

else

}while(

value

!= 0 );

str[

pos] =

'/0';

return

strrev

(str);

} inline void

sleep

(unsigned

intuseconds)

#endif

預設庫路徑怎麼不起作用呢(bvrde裡面)?

export ace_root

c_include_path=$ace_root

export c_include_path

共享庫ld_library_path=$ace_root/ace;$ld_library_path

export ld_library_path

靜態庫library_path=./snmp_lib/lib

export library_path

後來在makefile裡面明確指定庫檔案(給ld選項使用,編譯多專案檔案的單個檔案時只需指定-i路徑即可)才行:

libs

= ./snmp_lib/lib/libsnmp++.a /

./snmp_lib/libdes/libdes.a /

/usr/lib/libodbc.so

arm平台linux移植ethtool工具

1.git.kernel.org pub scm network ethtool ethtool.git 2.tar xzf ethtool 3.15.tar.gz cd ethtool 3.15 3.原始碼中是沒有configure檔案的首先要編譯生成該檔案 4.依次執行 aclocal auto...

php平台移植windows和linux

2015 1 14 今天專案中遇到乙個問題,在本地執行沒有問題,掛到伺服器上,就執行錯誤。過程中比較粗心,知道導致這樣的原因,居然小時漏掉了一些細節。比如,在php中通過宣告 autoload 方法可以自動載入相關類。而在windows和linux中有乙個比較大的區別,那就是linux是大小寫區分的...

Windows 程式移植到Linux平台的一波N折

本人前端時間寫了個html檔案分析器,windows平台上的vc6.0,使用標準c 昨天接到指令,應要求要發布乙個linux版本的,茫然啦,linux下面的hello world都沒有玩過,對linux下的c 程式僅僅限於聽他們神吹過的gcc,g makefile什麼的,其他一概不知。這就注定移植過...