只是为了兴趣,我想手工编译并运行最简单的C程序;
//t.c
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我想做:
$ cpp t.c:在这种情况下不应该执行任何操作,因为不需要进行预处理$ cc1 t.c: 应该编译t.c->t.s$ as -o t.o t.c: 应该组装t.s->t.o$ ld t.o:应该生成可执行文件a.out(实际上没有什么可做的)我遇到的问题是as,因为运行最终命令会产生:
ld: warning: cannot find entry symbol _start; defaulting to 00000000000400b0
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?我故意忽略了libc这一点,以使其尽可能简单,但我不明白发生了什么。我缺少什么标志?
我正在处理有关链接的文本,并希望与所述文本中的一些示例一起工作。
为了更好地理解调用gcc驱动程序时发生了什么,我正在考虑手工完成所有的老式编译;
cppcc1 as ld不幸的是,在我的 Mac 上,我似乎无法cc1直接引用(没有列出cc1in man)。我有哪些选择?
我只是不明白。
我相信gcc在调用gcc驱动程序时会自动链接libc.a。
但是,出于好奇,我想使用静态链接libc.a -static,但是我得到了;
ld: library not found for -lcrt0.o
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我只是不明白?还有,什么crt0?
我也读过一些帖子,说永远不要静态链接libc.a;为什么?从我所读的内容(当然我只是一个本科生)来看,我看不到静态链接的弊端。
我读了这篇文章,告诉我要添加的-lc内容似乎可以正确编译,但这是静态链接还是仅添加了libc.dylib?
此外,每当我使用-staticflag时,都会收到从返回的相同错误ld。我听不懂 我正在研究的文本显示了使用Unix环境的示例,并且由于OS X是基于Unix的,为什么我的Mac会有这么多困难?
谢谢,扎克
我正在尝试学习HTML5/Node.js/Express/MongoDB/AngularJS/Websocket这个似乎让大家现在兴奋的事情.
作为一个轻微的适得其反,我实际上很难在每种技术实际上做些什么(特别是将ejs作为模板引擎).到处都是Javascript和HTML!
特别是,我在分离websockets(或类似socket.io)和AngularJS提供的服务时遇到了麻烦.他们似乎都试图提供动力而不必重新发送整个HTML页面.
他们互相替代吗?或者他们服务于不同的目的?
此外,这两种技术似乎都转向绕过Express'路由的单页Web应用程序.那么,当使用Websockets/AngularJS时,Express会利用什么?看起来像Express提供的传统路由取代了只改变AngularJS中单页的视图