Hi I'm trying to create a shared library on MacOS-11.x.x but I get the following errors related to standard C library symbols missing:
嗨,我正试图在MacOS-11.x.x上创建一个共享库,但我遇到了以下与标准C库符号丢失有关的错误:
(venv) ELSPHIM-223046:pyembed wolf2$ ./linkit
ld: warning: object file (pyembed.o) was built for newer macOS version (11.0) than being linked (10.4)
ld: warning: dylib (/Users/Shared/venv/lib/libpython3.11.dylib) was built for newer macOS version (11.7) than being linked (10.4)
Undefined symbols for architecture x86_64:
"___stderrp", referenced from:
_main in pyembed.o
"_atoi", referenced from:
_main in pyembed.o
"_fprintf", referenced from:
_main in pyembed.o
"_printf", referenced from:
_main in pyembed.o
ld: symbol(s) not found for architecture x86_64
fatal error: /Library/Developer/CommandLineTools/usr/bin/libtool: internal link edit command failed
I tried:
我尝试过:
libtool -dynamic pyembed.o /Users/Shared/venv/lib/libpython3.11.dylib -o dddd.dylib -current_version 1.0 -compatibility_version 1.0
As you can see, I'm trying to build another shared library to invoke an embedded Python function, which works when linked as an application. I think that detail is unimportant since the only undefined symbols are from libc.
正如您所看到的,我正在尝试构建另一个共享库来调用嵌入式Python函数,该函数在作为应用程序链接时可以工作。我认为细节并不重要,因为唯一未定义的符号来自libc。
So now I try to find libc by: otool -L /bin/ls
- that reports:
所以现在我尝试通过:otool-L/bin/ls找到libc,它报告:
$ otool -L /bin/ls
/bin/ls:
/usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.120.1)
But then I do:
但后来我做到了:
$ ls -l /usr/lib/libSystem*
ls: /usr/lib/libSystem*: No such file or directory
So how does /bin/ls
even work? Where is libc (either .a
or .dylib
) on MacOS?
那么/bin/ls是如何工作的呢?MacOS上的libc(.a或.dlib)在哪里?
I already included that information in my post.
我已经在帖子中包含了这些信息。
更多回答
我是一名优秀的程序员,十分优秀!