使用gcc编译时无法链接库

时间:2019-05-29 19:54:30

标签: c gcc shared-libraries

我的目录结构是:

── bin
│   ├── mylib-osx.so.1.72
│   ├── mylib.so.1.72
├── my.c

我正在尝试编译my.c并链接mylib-osx.so.1.72(我在macOS上),但无济于事:

ld: library not found for -l:PhotoDNAx64.so.1.72

我尝试过:

  • gcc -o my -lmylib-osx my.c
  • gcc -o my -lmylib-osx.so.1.72 my.c
  • gcc -o my -lmylib my.c
  • gcc -o my -L./bin -lmylib-osx my.c
  • gcc -o my -L./bin -l:"mylib-osx.so.1.72" my.c

我在做什么错,为什么找不到该库?

1 个答案:

答案 0 :(得分:-1)

  

我在做什么错,为什么找不到该库?

了解有关Invoking GCC的信息。 您没有阅读(或gcc的任何其他文档)是错误的。

gcc的程序参数的顺序很重要(实际上,几个参数非常有用,例如,至少-Wall-g,以及有时-v)。您想要类似的东西

gcc -v -Wall -g my.c -lmylib-osx -o my

(也可以尝试这种方法的变体),因为gcc正在运行某些ld或等效的linker命令,并且如果要传递某些-L lib -目录使用类似

gcc -v -Wall -g my.c  -L./bin -lmylib-osx -o my

,并且您还需要阅读MacOSX linker(可能名为ld)的文档。您还可以阅读Levine的Linkers and loaders书。

如果您对gcc不满意(但请使用最新版本,那么GCC 8在2019年,而不是Apple出售的名为gcc的糟糕软件)可以考虑使用{{3 }}(也是最新版本,例如2019年的Clang 8)。它对程序参数顺序的限制与gcc相同(因为程序参数的顺序甚至对于Unix或POSIX Clang也很重要)。

通常,在询问有关该命令的问题之前先阅读该命令的文档。 Apple(或Linux)计算机上的最小值man gcc

PS。我上次使用MacOSX的时间是2004年。我有偏见的建议是安装和使用Linux(我从1993年开始使用Linux;我在2004年左右尝试MacOSX的时间不到一年,而{{3} },包括其cc和GUI operating system,以及Apple硬件)。

相关问题