2011-01-07 96 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格式。)