天天看點

64位CentOS7下編譯安裝nsis-2.46

       由于公司安排做OpenVPN的二次開發,是以需要搭建開發環境。官網檢視windows下的用戶端軟體,官方釋出版是在Linux下通過交叉編譯生成的安裝可執行檔案。nsis則是将Linux下編譯生成的dll,exe檔案進行打包然後生成一個可安裝檔案的工具。yum安裝行不通,Google上也找不到rpm安裝包。隻找到相應的源碼包。是以隻好自己編譯。

1. 下載下傳 nsis-2.46-src.tar.bz2 (source) and nsis-2.46.zip (zip package)兩個包。

2. 在/usr/local/下建立一個nsis檔案夾,用于編譯和安裝。

    mv nsis-2.46-src.tar.bz2 /usr/local/nsis/ 

     mv nsis-2.46.zip /usr/local/nsis/

3. cd /usr/local/nsis

    tar -jxvf nsis-2.46-src.tar.bz2

    unzip nsis-2.46.zip 

4. 在解壓後的nsis-2.46-src目錄下,有一個INSTALL檔案,提供一些編譯方面的資訊,可供參考。

     編譯需要依賴的軟體環境:

1. Python版本1.6及以上;

        2. SCons 版本0.96.93及以上

        3. C編譯器

    針對自己Linux環境進行相應軟體的安裝即可。

5. 編譯環境搭好後,即可開始編譯。

    scons SKIPSTUBS=all SKIPPLUGINS=all SKIPUTILS=all SKIPMISC=all NSIS_CONFIG_CONST_DATA=no PREFIX=/usr/local/nsis/nsis-2.46    install-compiler

   編譯的時候,可能報如下錯誤

   Source/script.cpp:6465:1:   required from here

Source/util.h:128:59: error: 'close' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]

   template <typename T> void operator()(T& x) { freefunc(x); } \

                                                           ^

Source/util.h:145:1: note: in expansion of macro 'RM_DEFINE_FREEFUNC'

 RM_DEFINE_FREEFUNC(close);

 ^

In file included from Source/script.cpp:49:0:

/usr/include/unistd.h:353:12: note: 'int close(int)' declared here, later in the translation unit

 extern int close (int __fd);

   錯誤原因是一個模闆在執行個體化時宏展開一個函數,但這個函數沒有事先聲明,找不到原型。是以在script.cpp中,

   #include "util.h"前面添加如下代碼:

   __BEGIN_DECLS

   extern int close (int __fd);

   __END_DECLS

6. nsis是32位版本的,需要32位版本的libstdc++庫

    yum upgrade libstdc++

    yum install libstdc++.i686

    yum upgrade zlib

    yum install zlib.i686

7. 編譯32位程式,編譯器可能錯誤使用64位連結器。修改編譯腳本,指定用32位ld

    vim   SCons/Config/gnu

    在### makensis environment下面相應位置追加環境變量

     makensis_env.Append(LINKFLAGS= ['-m32'])

8.将/usr/local/nsis/nsis-2.46/hin加入PATH環境變量。第一次執行出現以下錯誤:

   Error: opening stub "/usr/local/nsis/nsis-2.34/share/nsis/Stubs/zlib

   Error initalizing CEXEBuild: error setting default stub

   解決此問題:

    在/usr/local/nsis/nsis-2.46目錄mkdir share,然後在share目錄下執行ln -s /usr/local/nsis/nsis-2.46    nsis建立軟連結。OK,大功告成。執行makensis,列印幫助資訊,表示安裝正确。

繼續閱讀