2011-01-07 135 views
5

我想在Linux中爲Windows編譯靜態庫。以下是我跟着編譯從Linux爲Windows開發交叉編譯靜態庫

  1. 使用i586-mingw32msvc-cc -c static_lib.c -o static_lib.o
  2. 創建靜態庫在linux ar rv static_lib.a static_lib.oranlib static_lib.a
  3. 編譯的Linux靜態庫的源代碼的程序我在Eclipse中創建了一個示例程序在Windows和鏈接這個靜態庫,它是在linux中爲Windows交叉編譯的。在windows上使用的編譯器是mingw。

在windows eclipse中編譯程序的時候,編譯器給了我下面的錯誤。

static_test\static_lib.a: file format not recognized; treating as linker script 
\static_test\static_lib.a:1: syntax error 
collect2: ld returned 1 exit status 
Build error occurred, build is stopped 

的代碼如下:

static_lib.c

#include <stdio.h> 

void func(void) 
{ 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
     printf("Hello\n"); 
} 

sample_static.c

#include <stdio.h> 

extern void func(void); 

int main() 
{ 
    printf ("Main function\n"); 
    func(); 
} 

請給我點建議編譯並得到它的工作。

問候 杜琪峯艾倫

回答

1

嘗試使用交叉編譯器代替歸檔天然一個,即使用i586-mingw32msvc-ari586-mingw32msvc-ranlib代替arranlib

或者這只是一個錯誤的問題?

+1

即使使用交叉編譯器歸檔程序後,Windows上的mingw鏈接程序也會引發相同的錯誤。 – Johnnie 2011-01-07 10:59:20

1

嘗試i586-mingw32msvc-ar而不是普通的ar。通常,Linux中的ar不支持用於Windows編程的PE格式。 (或者您必須指示它使用PE格式。)