我試圖編譯使用MinGW或TDM-GCC的Windows XP的w3m。在W3m patch - Linux from scratch應用補丁和添加-lws2_32在生成文件LIBS我所遇到的這些5和Windows的不相容的功能(在第一次出現的順序)Windows相當於kill,open_pipe_rw和fork - 試圖編譯w3m
bcopy (at Str.c)
sleep (at file.c)
kill (at image.c)
open_pipe_rw (at image.c)
fork (at image.c)
我已經通過定義固定的前兩個後其視窗當量像:
void bcopy(const void *from, void *to, size_t n) {
int *dummy;
dummy = memcpy(to, from, n);
}
#define sleep(n) Sleep(n*1000)
這些之後,將所有的目標文件被編譯細但從image.o防止w3m.exe被調用這三個功能的Unix從在連接階段形成:
$ make
(cd libwc && make CC='gcc' OPTS='')
make[1]: Entering directory '/c/Documents and Settings/ibm/Downloads/w3m-0.5.3/libwc'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/c/Documents and Settings/ibm/Downloads/w3m-0.5.3/libwc'
gcc -I. -I. -g -O2 -I./libwc -IC:/msys32/usr/local/include -DHAVE_CONFIG_H -DAUXBIN_DIR=\"/usr/local/libexec/w3m\"
-DCGIBIN_DIR=\"/usr/local/libexec/w3m/cgi-bin\" -DHELP_DIR=\"/usr/local/share/w3m\" -DETC_DIR=\"/usr/local/etc\" -DCONF_DIR=\"/usr/local/etc/w3m\"
-DRC_DIR=\"~/.w3m\" -DLOCALEDIR=\"/usr/local/share/locale\"
-o w3m.exe main.o file.o buffer.o display.o etc.o search.o linein.o
table.o local.o form.o map.o frame.o rc.o menu.o mailcap.o image.o
symbol.o entity.o terms.o url.o ftp.o mimehead.o regex.o news.o func.o
cookie.o history.o backend.o keybind.o anchor.o parsetagx.o tagtable.o
istream.o version.o -lws2_32 -lpthread -L. -lindep -lgc -L./libwc -lwc
-LC:/msys32/usr/local/lib -lssl -lcrypto -lssl -lcrypto -lncurses
./libindep.a(indep.o): In function `bcopy':
C:\Documents and Settings\ibm\Downloads\w3m-0.5.3/indep.c:74: multiple definition of `bcopy'
./libindep.a(Str.o):C:\Documents and Settings\ibm\Downloads\w3m-0.5.3/Str.c:36: first defined here image.o: In function `closeImgdisplay':
C:\truncated\w3m-0.5.3/image.c:126: undefined reference to `kill'
image.o: In function `openImgdisplay':
C:\truncated\w3m-0.5.3/image.c:93: undefined reference to `open_pipe_rw'
image.o: In function `loadImage':
C:\truncated\w3m-0.5.3/image.c:354: undefined reference to `kill'
C:\truncated\w3m-0.5.3/image.c:383: undefined reference to `kill'
C:\truncated\w3m-0.5.3/image.c:436: undefined reference to `fork'
collect2.exe: error: ld returned 1 exit status
Makefile:130: recipe for target 'w3m.exe' failed
make: *** [w3m.exe] Error 1
如何定義這三個Unix函數的Windows等價物?如果你可以建議任何其他解決方案,比如給出特定的選項或編輯configure命令和/或Makefile,以便使用這些函數的Windows等價物,那也沒關係。謝謝。
kill或fork沒有1:1的等價物,這取決於如何使用這些調用。在fork的情況下,如果不重新設計程序,通常是不可能的。 (谷歌搜索open_file_rw表明它是第三方庫的一部分,而不是標準的Linux功能。) –
感謝您的評論,這很有幫助。正如你所指出的那樣,在fork的情況下,事情有點棘手,我可能不得不努力調整程序,直到它們得到修復。我注意到了open_pipe_rw的情況,很少被使用。我也必須找到一種方法來調整這一點。 – Romario
我在http://osdir.com/ml/web.w3m.devel/2006-01/msg00000.html找到了一個w3m的Windows補丁程序。當然,這是針對以前的w3m版本,但有趣的是它顯示瞭如何補丁fork和open_pipe_rw函數。在獲得這些信息後,我注意到使用這些Unix函數的唯一模塊是image.o,可能支持w3m中的圖像。然後我嘗試了配置中的--disable-image選項,並解決了這個問題。我得到了一個完美編譯和鏈接w3m.exe。 – Romario