2011-01-07 29 views
5

Quiero compilar una biblioteca estática en Linux para Windows. A continuación se presenta el procedimiento que seguí para compilarBiblioteca estática de compilación cruzada de Linux para Windows

  1. compilar el código fuente de la biblioteca estática en Linux a través de i586-mingw32msvc-cc -c static_lib.c -o static_lib.o
  2. Creado la biblioteca estática en Linux ar rv static_lib.a static_lib.o y ranlib static_lib.a
  3. creé un programa de ejemplo en Eclipse en Windows y vinculó esta biblioteca estática que se compila de forma cruzada en Linux para Windows. El compilador utilizado en Windows era mingw.

al compilar el programa en Windows Eclipse, el compilador me da el siguiente error.

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 

Los códigos son los siguientes:

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(); 
} 

amablemente me dan sugerencias para recopilar y hacer que funcione.

Saludos Johnnie Alan

Respuesta

1

Trate de usar el archivador compilador cruzado en lugar de la nativa, es decir, utilizar i586-mingw32msvc-ar y i586-mingw32msvc-ranlib en lugar de ar y ranlib.

¿O es solo un error al escribir sobre la pregunta?

+1

Incluso después de usar el archivador de compilación cruzada, el enlazador de mingw en Windows arroja el mismo error. – Johnnie

1

Pruebe i586-mingw32msvc-ar en lugar de simple ar. Normalmente, ar en Linux no admitirá el formato PE utilizado para la programación de Windows. (O tendrá que indicarle que use el formato PE).

Cuestiones relacionadas