bug#29298: C++ compiler, Newlib and "implicit declaration of function '_spawnv'"

Jeffrey Walton <[email protected]>
Newsgroups gmane.comp.gnu.libtool.bugs
Message-ID <CAH8yC8mUrmng5HC5YHRwYyPL5gQCRxw6myU=gyAgSdU-fruMRA@mail.gmail.com>
Hi Everyone,

We are testing an Autotools front-end on MSYS2. The download is
available from https://mingw-w64.org/.

We are a C++ project so we AC_PROG_CXX and AC_LANG([C++]) in
configure.ac. MSYS2 uses Newlib, and quite a few symbols are missing
because Newlib adheres to Posix more strictly than glibc and
libstdc++. The Autotools machinery produces files like lt-cryptest.c
and lt-cryptestcwd.c.

When libtool compiles its C source files with the C++ compiler on a
system with Newlib, I believe it needs to set _XOPEN_SOURCE=600.
Otherwise, errors like below are encountered. Also see
http://pubs.opengroup.org/onlinepubs/007904975/functions/xsh_chap02_02.html.

In fact, the Newlib folks recommend setting _XOPEN_SOURCE for both the
GNU and Newlib runtimes. Also see
https://sourceware.org/ml/newlib/2017/msg01100.html.

Jeff

**********

/bin/sh ./libtool  --tag=CXX   --mode=link g++ -pthread
-fdata-sections -ffunction-sections -pipe
-DCRYPTOPP_DATA_DIR='"@pkgdatadir@/cryptopp/"' -g -O2 -pthread
-Wl,--gc-sections  -o cryptest.exe cryptest-test.o cryptest-bench1.o
cryptest-bench2.o cryptest-validat0.o cryptest-validat1.o
cryptest-validat2.o cryptest-validat3.o cryptest-datatest.o
cryptest-regtest1.o cryptest-regtest2.o cryptest-regtest3.o
cryptest-dlltest.o cryptest-fipsalgt.o cryptest-adhoc.o libcryptopp.la
/bin/sh ./libtool  --tag=CXX   --mode=link g++ -pthread
-fdata-sections -ffunction-sections -pipe -g -O2 -pthread
-Wl,--gc-sections  -o cryptestcwd.exe cryptestcwd-test.o
cryptestcwd-bench1.o cryptestcwd-bench2.o cryptestcwd-validat0.o
cryptestcwd-validat1.o cryptestcwd-validat2.o cryptestcwd-validat3.o
cryptestcwd-datatest.o cryptestcwd-regtest1.o cryptestcwd-regtest2.o
cryptestcwd-regtest3.o cryptestcwd-dlltest.o cryptestcwd-fipsalgt.o
cryptestcwd-adhoc.o libcryptopp.la
libtool: link: g++ -pthread -fdata-sections -ffunction-sections -pipe
-g -O2 -pthread -Wl,--gc-sections -o .libs/cryptestcwd.exe
cryptestcwd-test.o cryptestcwd-bench1.o cryptestcwd-bench2.o
cryptestcwd-validat0.o cryptestcwd-validat1.o cryptestcwd-validat2.o
cryptestcwd-validat3.o cryptestcwd-datatest.o cryptestcwd-regtest1.o
cryptestcwd-regtest2.o cryptestcwd-regtest3.o cryptestcwd-dlltest.o
cryptestcwd-fipsalgt.o cryptestcwd-adhoc.o  ./.libs/libcryptopp.a
-pthread
libtool: link: g++ -pthread -fdata-sections -ffunction-sections -pipe
-DCRYPTOPP_DATA_DIR=\"@pkgdatadir@/cryptopp/\" -g -O2 -pthread
-Wl,--gc-sections -o .libs/cryptest.exe cryptest-test.o
cryptest-bench1.o cryptest-bench2.o cryptest-validat0.o
cryptest-validat1.o cryptest-validat2.o cryptest-validat3.o
cryptest-datatest.o cryptest-regtest1.o cryptest-regtest2.o
cryptest-regtest3.o cryptest-dlltest.o cryptest-fipsalgt.o
cryptest-adhoc.o  ./.libs/libcryptopp.a -pthread
./.libs/lt-cryptestcwd.c: In function 'main':
./.libs/lt-cryptest.c: In function 'main':
./.libs/lt-cryptestcwd.c:319:16: warning: implicit declaration of
function '_spawnv' [-Wimplicit-function-declaration]
   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
                ^~~~~~~
./.libs/lt-cryptest.c:319:16: warning: implicit declaration of
function '_spawn ' [-Wimplicit-function-declaration]
   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
                ^~~~~~~
/tmp/ccFfsaBb.o: In function `main':
/home/cryptopp/./.libs/lt-cryptest.c:319: undefined reference to `_spawnv'
/home/cryptopp/./.libs/lt-cryptest.c:319:(.text.startup+0x4b4):
relocation truncated to fit: R_X86_64_PC32 against undefined symbol
`_spawnv'
collect2: error: ld returned 1 exit status
/tmp/ccfJfnlw.o: In function `main':
/home/cryptopp/./.libs/lt-cryptestcwd.c:319: undefined reference to `_spawnv'
/home/cryptopp/./.libs/lt-cryptestcwd.c:319:(.text.startup+0x4b4):
relocation truncated to fit: R_X86_64_PC32 against undefined symbol
`_spawnv'
strip: './cryptest.exe': No such file
collect2: error: ld returned 1 exit status
strip: './cryptestcwd.exe': No such file
./libtool: line 11083: ./cryptest.exe: No such file or directory
./libtool: line 11083: ./cryptestcwd.exe: No such file or directory
make[1]: Leaving directory '/home/cryptopp'
...
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.