我的目录结构是:
── 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
我在做什么错,为什么找不到该库?
答案 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硬件)。