On 2017-10-4 03:37 , Daniel J. Luke wrote:
Currently ntp builds on 10.13 fail with:

% make
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-am
   CCLD     ntptime
Undefined symbols for architecture x86_64:
   "_lib_nextbuf", referenced from:
       _common_prettydate in libntp.a(prettydate.o)
   "_lib_stringbuf", referenced from:
       _common_prettydate in libntp.a(prettydate.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [ntptime] Error 1
make: *** [all] Error 2

The libtool invocation is actually:

../libtool --silent --tag=CC   --mode=link cc -Wall -Wcast-align -Wcast-qual 
-Wmissing-prototypes -Wpointer-arith -Wshadow -Winit-self -Wstrict-overflow 
-D_P1003_1B_VISIBLE  -Wstrict-prototypes  -g -O2   -L/opt/local/lib -o ntptime 
ntptime.o ../libntp/libntp.a -lresolv    -intl

What's confusing to me is that libntp.a includes those symbols:

% nm -AU ../libntp/libntp.a | grep _lib_nextbuf
../libntp/libntp.a:lib_strbuf.o: 0000000000000004 C _lib_nextbuf
% nm -AU ../libntp/libntp.a | grep _lib_stringbuf
../libntp/libntp.a:lib_strbuf.o: 0000000000000800 C _lib_stringbuf

I'm clearly missing something - but I'm not sure what it is. Any thoughts?

Apparently Apple's linker doesn't recognise common symbols in static libraries as being defined. Workaround would be to initialise the variables somewhere or use -fno-common. Ideally don't use common linkage at all, have one file that each global actually lives in and have all other declarations be extern.

- Josh

Reply via email to