[Bug 268518] Undefined symbol error when building shared library with environ(7)
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 268518] Undefined symbol error when building shared library with environ(7)"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 268518] Undefined symbol error when building shared library with environ(7)"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 268518] Undefined symbol error when building shared library with environ(7)"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 268518] Undefined symbol error when building shared library with environ(7)"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 22 Dec 2022 22:26:52 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=268518 Bug ID: 268518 Summary: Undefined symbol error when building shared library with environ(7) Product: Base System Version: 13.1-RELEASE Hardware: amd64 OS: Any Status: New Severity: Affects Only Me Priority: --- Component: bin Assignee: bugs@FreeBSD.org Reporter: triaxx@NetBSD.org Considering the simple 'foo.c' file: | extern char **environ; | | int foo(int a) | { | if (environ) | { | return 1; | } | return 0; | } and a Makefile to build a shared library from it: | CC=clang -v | | foo.o: foo.c | $(CC) -c -Wall -Werror -fPIC -o $@ $? | | libfoo.so: foo.o | $(CC) -Wl,--no-undefined -shared -o $@ $? The following error occurs: | $ make libfoo.so | clang -v -c -Wall -Werror -fPIC -o foo.o foo.c | FreeBSD clang version 13.0.0 (git@github.com:llvm/llvm-project.git llvmorg-13.0.0-0-| gd7b669b3a303) | Target: x86_64-unknown-freebsd13.1 | Thread model: posix | InstalledDir: /usr/bin | (in-process) | "/usr/bin/clang" -cc1 -triple x86_64-unknown-freebsd13.1 -emit-obj -mrelax-all --mrelax-relocations -disable-free -disable-llvm-verifier -discard-value-names -main-file-name foo.c -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=all -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/home/triaxx -resource-dir /usr/lib/clang/13.0.0 -Wall -Werror -fdebug-compilation-dir=/home/triaxx -ferror-limit 19 -fgnuc-version=4.2.1 -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o foo.o -x c foo.c | clang -cc1 version 13.0.0 based upon LLVM 13.0.0 default target x86_64-unknown-freebsd13.1 | #include "..." search starts here: | #include <...> search starts here: | /usr/lib/clang/13.0.0/include | /usr/include | End of search list. | clang -v -Wl,--no-undefined -shared -o libfoo.so foo.o | FreeBSD clang version 13.0.0 (git@github.com:llvm/llvm-project.git llvmorg-13.0.0-0-gd7b669b3a303) | Target: x86_64-unknown-freebsd13.1 | Thread model: posix | InstalledDir: /usr/bin | "/usr/bin/ld" --eh-frame-hdr -Bshareable --hash-style=both --enable-new-dtags -o libfoo.so /usr/lib/crti.o /usr/lib/crtbeginS.o -L/usr/lib --no-undefined foo.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/crtendS.o /usr/lib/crtn.o | ld: error: undefined symbol: environ | >>> referenced by foo.c | >>> foo.o:(foo) | clang: error: linker command failed with exit code 1 (use -v to see invocation) | *** Error code 1 | | Stop. | make: stopped in /home/triaxx I noticed that environ symbol seems to be undefined in libc: | $ readelf -s /lib/libc.so.7 | grep environ | 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND environ while it seems to be present on other systems like Linux or NetBSD. This issue produces a build error for Pulseaudio 16.1. -- You are receiving this mail because: You are the assignee for the bug.