编译和链接32位架构的C程序

时间:2011-03-02 04:35:33

标签: c architecture makefile

所以我正在完成斯坦福大学CS107课程的作业,我无法完成编译未完成的程序(项目文件和原始makefile 可以是found on the course page,我'我正在完成作业4 RSS。)

经过大量研究,我认为问题是我在64位架构上使用gcc(Mac OS 10.6),assn-4-rss-news-search-lib/linux下的预编译库代码是32位架构。我尝试将gcc设置为使用i386和-m36,但没有工作,我只是在猜测。

所以这是我运行make时得到的输出:

gcc  -g -Wall -std=gnu99 -Wno-unused-function    -c -o rss-news-search.o rss-news-search.c
gcc  rss-news-search.o -g -Wall -std=gnu99 -Wno-unused-function -g  -lnsl -lrssnews -L/Users/derp/Documents/OCW/CS107/Work/programming4/assn-4-rss-news-search-lib/linux -o rss-news-search
ld: library not found for -lnsl
collect2: ld returned 1 exit status
make: *** [rss-news-search] Error 1

这是我删除-lnsl时提到的架构差异的输出:

gcc  -g -Wall -std=gnu99 -Wno-unused-function    -c -o rss-news-search.o rss-news-search.c
gcc  rss-news-search.o -g -Wall -std=gnu99 -Wno-unused-function -g  -lrssnews -L/Users/derp/Documents/OCW/CS107/Work/programming4/assn-4-rss-news-search-lib/linux -o rss-news-search
ld: warning: in /Users/derp/Documents/OCW/CS107/Work/programming4/assn-4-rss-news-search-lib/linux/librssnews.a, file was built for unsupported file format which is not the architecture being linked (x86_64)
Undefined symbols:
    "_URLConnectionDispose", referenced from:
        _ProcessFeed in rss-news-search.o
        _ParseArticle in rss-news-search.o
    ... several more undefined symbols mentioned ...
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [rss-news-search] Error 1

所以我要求我就如何解决这个问题提出任何想法。我已经花了几个小时来调整设置和谷歌无所作为。

2 个答案:

答案 0 :(得分:2)

如果像我这样的人在这段时间过后都会寻找答案...... 通过安装32位Ubuntu的wubi版本可以轻松解决问题。它在64位系统上运行良好。您只需要编辑makefile,它就知道在哪里查找提供的库。

答案 1 :(得分:0)

  • 我很确定在macos上使用linux上的预编译库,无论有多大,都行不通(好吧,可能可以在MacOS for Linux上进行交叉编译,也许可以运行Linux可执行文件在MacOS上的兼容性框中,但这与您尝试的操作完全不同。)

  • libnsl是Linux上的标准库(它提供了一些与网络相关的功能)