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

标签 c architecture makefile

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

经过大量研究,我认为问题是我在 64 位架构 (Mac OS 10.6) 上使用 gcc 以及 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

因此,我正在寻求有关我可以采取哪些措施来解决此问题的任何想法。我已经调整设置好几个小时了,谷歌搜索也无济于事。

最佳答案

万一像我这样的人在这么长时间过去后仍在寻找答案...... 通过安装 32 位 Ubuntu 的 wubi 版本,问题很容易解决。在64位系统上运行良好。您只需要编辑 makefile,以便它知道在哪里查找提供的库。

关于编译和链接 32 位架构的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5163435/

相关文章:

architecture - 收集审计和统计数据

architecture - 指令和数据存储器数据格式

c++ - make/cc 找不到头文件,即使它的目录存在于 PATH 变量中

c++ - g++ makefile "was not declared in this scope"用于 winbase.h 中的元素

c - 将格式化文本文件读入数组

c - 将三个坐标 (x,y,z) 编码为一个整数或 float

architecture - 使用 Erlang/OTP 构建容错软实时 Web 应用程序

c - 如何在整个项目(由其他人创建)中添加标志(例如-g)?

c++ - 关闭没有 FD_CLR 的套接字

c++ - 修改 char *const 字符串