2013-04-23 66 views
1

我試圖CX_Freeze Linux平臺的應用程序。 Windows MSI安裝程序可以很好地工作,但Linux對應部分並沒有按照我所需的方式運行。冷凍共享與cx_freeze對象在Linux上

當包裝是建立它完美地運行原來的系統上,但是,當移植到不同的系統(雖然相同的體系結構)它產生一個段錯誤。我做的第一件事是檢查圖書館,並且與libc,pthread和libdl有一些巨大的版本差異。所以,我決定把這些在建,像這樣:

if windows_build: 
    build_exe_options['packages'].append("win32net") 
    build_exe_options['packages'].append("win32security") 
    build_exe_options['packages'].append("win32con") 
    pywintypes_dll = 'pywintypes{0}{1}.dll'.format(*sys.version_info[0:2])  # e.g. pywintypes27.dll 
    build_exe_options['include_files'].append((os.path.join(GetSystemDirectory(), pywintypes_dll), pywintypes_dll)) 
else: 
    build_exe_options['packages'].append("subprocess") 
    build_exe_options['packages'].append("encodings") 
    arch_lib_path = ("/lib/%s-linux-gnu" % os.uname()[4]) 
    shared_objects = ["libc.so.6", "libpthread.so.0", "libz.so.1", "libdl.so.2", "libutil.so.1", "libm.so.6", "libgcc_s.so.1", "ld-linux-x86-64.so.2"] 
    lib_paths = ["/lib", arch_lib_path, "/lib64"] 
    for so in shared_objects: 
     for lib in lib_paths: 
      lib_path = "%s/%s" % (lib, so) 
      if os.path.isfile(lib_path): 
       build_exe_options['include_files'].append((lib_path, so)) 
       break 

覈對原件cx_frozen斌似乎動態庫發揮有一部分後和攔截完美的呼籲。雖然現在我處於pthread分段錯誤的部分,因爲他嘗試使用系統libc而不是我的(使用ldd和gdb進行檢查)。

我的問題很簡單,這種方法我想是可怕的,因爲它沒有做遞歸depency解決。因此我的問題是「這樣做的更好方法是什麼?或者我應該在我的安裝程序中編寫遞歸依賴解決方案?」

而且爲了擊敗解決方案:「使用原生的Python,而不是」,我們得到了我們想要運行這個藏漢一些硬件設備(認爲2〜4U)的Linux(和Bash訪問)。當我們可以通過cx_freeze和運行librarys時,移植整個python(通過它的動態鏈接etcetc)看起來就像很多工作的方式。

+0

我想說明我已閱讀[鏈接](http://hackerboss.com/how-to-distribute-commercial-python-applications/) – Stolas 2013-04-23 12:47:22

回答

1

我不知道你的其他問題,但航運libc.so.6到另一個系統,你做的方式不可能工作,作爲解釋here

+0

當然可以哦!感謝記憶微調。 chroot可以做到這一點! – Stolas 2013-05-06 08:11:47

+0

雖然它不能解決問題,但我決定接受這個答案:) – Stolas 2013-05-22 10:36:23