我正在通过 Head First C,做所有的编程示例。第 8 章从静态链接开始。我们使用这四个命令(Cygwin):
gcc -I./includes -c hfcal.c -o hfcal.o
gcc -I./includes -c elliptical.c -o elliptical.o
ar -rcs ./libs/libhfcal.a hfcal.o
gcc elliptical.o -L./libs -lhfcal -o elliptical
假设我输入正确,它会打印出几行显示椭圆机上燃烧的卡路里。
接下来他们介绍了动态链接。这不是书中最清晰的一章,我仍然有点模糊。更复杂的是,我不确定新代码是否有错别字。文本说代码与以前相同,但在斜杠之前省略了点,甚至在一种情况下省略了包含末尾的 s。我把点放回去,只改变了他们说应该改变的部分。(我去了他们的勘误页面,没有看到任何相关内容。)这是新代码:
gcc -I./includes -fPIC -c hfcal.c -o hfcal.o //Got a warning, fPIC ignored, as book predicted
gcc -shared hfcal.o -o ./libs/libhfcal.dll
gcc -I./includes -c elliptical.c -o elliptical.o
gcc elliptical.o -L./libs -lhfcal -o elliptical
请注意,除了被忽略-fPIC
的和第二行之外,这些命令与第一种情况相同,但顺序略有不同。
在我成功运行 ./elliptical 之后,我想知道我是否应该使用不同的目录,并且可能缺少的点是故意的。我从未 rm'd 存档 .a 文件,它与新的 dll 文件位于同一目录中。编译器如何知道是使用 libhfcal.a 还是 libhfcal.dll,因为它们都在那里并且我以相同的方式调用它们?是因为订单吗?
有什么好的资源可以让我阅读更清晰的解释,尤其是我可以尝试的代码?