gcc -l你让我头好大啊!

今天尝试make一下遇到了莫名其妙出现的.o文件,居然不是空的?【有趣的发现】,让我一直失败的代码是LIBS = -L../common -lmyLib 我的myLib.a文件确实不是libmyLib.a而是myLib.a 因为这个myLib某种程度上是这个项目的命名要求,如果前面再加一个lib就太难看了,所以我不想加 我就问ChatGPT,如果我的库不是以lib开头呢? GPT告诉我,代码不用动 可是ld: library 'myLib' not found就摆在那里啊 改了半天突发奇想,我同时还有一个myLib.o,如果我用LIBS = -L../common -lmyLib.o会不会可以呢 然后就成了。 我都不知道为什么。

所以正确的做法其实是,如果你用.a,可以加个小小的冒号, i.e. LIBS = -L../common -l:myLib.a 不对等等什么情况?

gcc -o template template.c initShader.o -L../common -l:myLib.a -framework GLUT -framework OpenGL -D GL_SILENCE_DEPRECATION
ld: library ':myLib.a' not found

问一问Claude:

我理解你遇到了这个错误。这个问题通常出现在 macOS 系统上,因为 macOS 的链接器 (ld) 对 -l: 选项的处理方式与标准 GNU 链接器略有不同。让我们来解决这个问题。

  • 直接指定库文件的完整路径
  • 使用 -force_load 选项(macOS 特有)

… 好的,作为Mac用户,要学会自适应。还是重命名为libmyGLS.a吧 听起来也挺酷的。 (GLS = GL Support)

ir, culu ; )

仅允许跳转至本网站的链接引用。未经授权不得转载、复制或用于任何形式的商业或非商业用途。
使用 Hugo 构建
主题 StackJimmy 设计