2012-01-30 100 views
4

所以,我開發了一個運行Linux的真棒項目,我需要在Windows上創建端口。問題是,libyaml是我的依賴項的一部分,我需要爲Windows編譯它。在Windows上編譯libyaml

因此,我運行了cygwin環境,運行了./configure和make,並且一切順利:構建了庫,我得到了.a文件。

除了makefile文件從來沒有結束過,因爲它無法建立的例子:原來一些符號從庫丟失:

undefined reference to `_imp__yaml_parser_initialize' 
undefined reference to `_imp__yaml_parser_set_input_file' 
undefined reference to `_imp__yaml_parser_scan' 
undefined reference to `_imp__yaml_token_delete' 
undefined reference to `_imp__yaml_parser_delete' 

所以當然不知道怎麼會這樣可能是真實的,我去了在搜索所述符號,而我,事實上,發現他們在二,雖然符號是一點點不同,因爲你可以看到:

$ nm src/.libs/libyaml.a | grep parser_set_input_file 
000005a8 T _yaml_parser_set_input_file 

所以,這通常是函數名的呈現方式,當我編譯一個dinamicaly可加載的庫。我嗡嗡的是,爲什麼鏈接器不能找到這些功能? imp從哪裏來?

我該怎麼做,以便我的程序可以正確鏈接到libyaml?除了這些功能之外,其他一切正在發揮作用。

你會成爲一個拯救我從這種惡魔般的編譯鏈接的東西嗎? 我感謝你的關注。

編輯:我一直在這個問題上工作了幾個小時。 因此,顯然它來自於mingw:來自cygwin的gcc在編譯例子時沒有任何問題。 但是,即使我嘗試使用cygwin的gcc,錯誤依然存在。我開始厭倦了這個遲鈍的操作系統。每次我在Windows上開發時,我花的時間都比解決問題的時間多得多。爲什麼總是會有這樣的痛苦?

是不是有一種簡單的方法來解釋鏈接器不搜索這些函數的錯位名稱?

編輯:我發現這個: http://cygwin.com/ml/cygwin/2001-04/msg00942.html 似乎有人用ncurses有類似的問題。雖然我無法做出任何事情。

+0

-1:爲0.1.5版本以下工作不到2分鐘,谷歌搜索發現[這太問題(http://stackoverflow.com/q/3273486/467957),與答案是指補丁。我嘗試了這個補丁,現在編譯完成。 – eriktous 2012-01-31 00:37:40

+2

是的,我也找到了。編譯這個庫我沒有任何問題。我有問題連接它。另外你是不做功課的人,這個補丁已經在libyaml的0.1.4中加入了,所以這個評論是完全不相關的。感謝-1,真的是我在這之後所需要的。 – Michael 2012-01-31 00:39:37

+0

你說當它試圖構建測試程序時會發生錯誤並停止。我下載並嘗試構建庫並收到相同的確切錯誤。應用補丁後,成功完成。在libyaml 0.1.4的源文件中查看'include/yaml.h'我下載了我沒有看到這個補丁已被應用的證據。 – eriktous 2012-01-31 00:50:30

回答

2

舊線程,但答案仍不清楚。

./configure CFLAGS="-DYAML_DECLARE_STATIC" --enable-static --disable-shared