2016-05-20 22 views
7

Şu anda Ubuntu 64x 14.04 üzerinde Windows 32x için c libcurl'ı derlemeye çalışıyorum. https://curl.haxx.se/download.htmlÇapraz derlenmiş C Windows libcurl Ubuntu'da doğru şekilde bağlanamıyor

2 ila

1) Yükleme kitaplığı) çıkarılan libcurl klasörüne gidin ve çalıştırın::

biraz araştırma sonra aşağıdaki adımları takip ./configure --host=i686-w64-mingw32 --build=i686-pc-linux-gnu --prefix=/usr/i686-w64-mingw32/ --enable-static --disable-shared

3) yürütün: sudo Bunları stateme dahil eklendi Sonra

make install:

4) Yürütme yapmak nts: hata kodu aşağıdaki döndü

i686-w64-mingw32-gcc main.c -o main.exe -L/usr/i686-w64-mingw32/lib -lcurl 

derleyici:

#include <winsock2.h> // Needed for curl 
#include <windows.h> // Windows API 
#include <curl/curl.h> 

int main(int argc, char** argv) 
{ 
    CURL *curl; 
    CURLcode response; 

    char url[] = "someurl.com"; 

    curl = curl_easy_init(); 
    if(curl) 
    { 
     curl_easy_setopt(curl, CURLOPT_URL, url); //set url options 

     /* Perform the request, res will get the return code */ 
     response = curl_easy_perform(curl); 

     if(response != CURLE_OK) 
     { 
      //Do something 
     } 

     /* always cleanup */ 
     curl_easy_cleanup(curl); 
    } 

return 0; 
} 

Şimdi şu argümanlarla kodumu derlemeye çalıştık

/tmp/ccebLf6U.o:main.c:(.text+0x336): Not defined reference to `_imp__curl_easy_init' 
/tmp/ccebLf6U.o:main.c:(.text+0x365): Not defined reference to `_imp__curl_easy_setopt' 
/tmp/ccebLf6U.o:main.c:(.text+0x372): Not defined reference to `_imp__curl_easy_perform' 
/tmp/ccebLf6U.o:main.c:(.text+0x3f4): Not defined reference to `_imp__curl_easy_cleanup' 
collect2: error: ld returned 1 exit status 

birisi bu nasıl giderileceği ile ilgili bir fikri vardır ?

[DEĞİŞTİR] Eğer bukle-config diyebilir derleyici seçenekleri bir demet elde ediyoruz tökezledi gerçekten ilginç

şey.

+0

Neden [tag: linux] ve [tag: ubuntu] etiketlerini 'windows.h' içeriyorsanız etiketlediniz? ... – LPs

+0

@LPs İlk cümlenimde ne yazdığımı okuyun. Ubuntu aka Linux üzerinde bir çapraz derleme yaptım ve problemim Linux çaprazlama yolunda yatıyor. – Qubasa

cevap

0

Yani bu sorunun benim çözüm muhtemelen burada yatıyor: Cross compile tips for libraries

Bunlar bazı ipuçları ve püf noktaları çapraz derleme derleyici mingw32 için ve benim eksik argüman -DCURL_STATICLIB ile kıvrılma derleme bulunmaktadır. Bunu test etmedim, çünkü problemi kıvrılmadan çözdüm.

+0

Ama bu genellikle sadece ilk adımdır. Bunu yapmak muhtemelen büyük olasılıkla başka bir bağlantı sorunları içine koşacak: libcurld.lib (easy.obj): hata LNK2019: çözülmemiş harici sembol __imp__WSACleanup @ 0 fonksiyonunda başvurulan _win32_init .... bunu tekrar bağlantılandırarak çözebilirsiniz : wldap32.lib ve Ws2_32.lib http://blog.yastrebkov.com/2010/08/unresolved-externals-while-linking.html – GregPhil

2

Çapraz Derleme kütüphanesi --prefix'u kullanarak, üst düzey yükleme dizinini tanımlıyorsunuz.

onlar işaret ediyor -L/usr/i686-w64-mingw32/ kullanma /usr/i686-w64-mingw32/include

alınacaktır dosyaları içerir için

Libs /usr/i686-w64-mingw32/lib

aynı şeyin içine yerleştirilecek kütüphaneler ve çapraz derleyici için yanlış yol için libcurl

bulamıyorum Komutunuza -I/usr/i686-w64-mingw32/include eklemeniz gereken doğru yeri belirtin.

Sonunda statik libl'leri statik olarak derlediniz, ancak bunları statik olarak derlemek istiyorsunuz: Komutunuza -static ekleyin.

SO doğru komut olacaktır: curls FAQ itibaren

i686-w64-mingw32-gcc -static -I/usr/i686-w64-mingw32/include -L/usr/i686-w64-mingw32/lib -lcurl main.c -o main.exe 
+0

Bunu denedim ama ne yazık ki işe yaramıyor :(Başka bir fikrin var mı? – Qubasa

+0

Libcurl. * Nerede yüklü?/Usr/i686-w64-mingw32/lib' doğru yol mu? – LPs

+0

Evet bir libcurl.a ve bir libcurl.la – Qubasa

1

: sizin gibi bağlayıcı hatası alırsanız

"bilinmeyen sembol __imp__curl_easy_init ..." Eğer yanlış karşı bağladığınız (statik) kütüphane. Eğer libcurl.dll ve lib libre kullanmak istiyorsanız, herhangi bir ekstra CFLAGS'a ihtiyacınız yoktur, ancak aşağıdaki içe aktarma kitaplıklarından birini kullanın. Bunlar çeşitli lib/Makefile tarafından üretilen kütüphaneleridir.* Dosyaları:

Target:   static lib. import lib for libcurl*.dll. 
    ----------------------------------------------------------- 
    MingW:   libcurl.a  libcurldll.a 
    MSVC (release): libcurl.lib libcurl_imp.lib 
    MSVC (debug): libcurld.lib libcurld_imp.lib 
    Borland:   libcurl.lib libcurl_imp.lib 

deneyin yolu -lcurl_imp veya -llibcurl_imp

Güncelleme linker'a:

i686-w64-mingw32-g++ -o app.exe objects.a -Lexternals/curl-7.39.0/lib -llibcurl_imp 

yerine neden libcurldll.alibcurl_imp.lib kullanın: İşte MinGW64 ile benim Ubuntu üzerinde bayrakları yazma olduğunu Yukarıdaki tabloda açıklandığı gibi? Becouse, libcurl_imp.lib'u yapan cmake ile curl yapıyorum. Bu yüzden yerleşik kütüphanenin adını kontrol etmelisiniz.

+0

Deneme sürümü. Yeniden kütüphane ile tekrar denendi ... başarısız oldu ..... Hayır, burada duracağım. Sonunda yapılandırma veya derleme ile yanlış bir şey yaptığımı düşünüyorum? Bu arada kütüphane 7.49 sürümünü kullanıyorum. Gerçekten ilgimi çeken ilginç bir şey, eğer curl-config'ı çağırırsanız, ilginç olan ama benim durumumda yardımcı olmayan bir dizi derleyici seçeneği edinmenizdir. – Qubasa

İlgili konular