cpp-httplib icon indicating copy to clipboard operation
cpp-httplib copied to clipboard

Fix linker error on macOS when using CMake

Open threecgreen opened this issue 1 month ago • 0 comments

This pull request fixes an issue where the CMake build was missing linking against CFNetwork, which is used in the non-blocking getaddrinfo logic on macOS. This wasn't caught in CI because the tests use plain make on macOS.

Example error when building the httplib tests on mac:

[1/2] Linking CXX executable test/httplib-test
FAILED: [code=1] test/httplib-test test/httplib-test[1]_tests.cmake /Users/carter/git/cpp-httplib/build/test/httplib-test[1]_tests.cmake
: && /usr/bin/c++ -arch arm64 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -L/opt/homebrew/opt/openssl@3/lib test/CMakeFiles/httplib-test.dir/test.cc.o test/CMakeFiles/httplib-test.dir/include_httplib.cc.o -o test/httplib-test  /opt/homebrew/lib/libgtest_main.a  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libcurl.tbd  -framework CoreFoundation -framework Security  /opt/homebrew/Cellar/brotli/1.2.0/lib/libbrotlicommon.dylib  /opt/homebrew/Cellar/brotli/1.2.0/lib/libbrotlienc.dylib  /opt/homebrew/Cellar/brotli/1.2.0/lib/libbrotlidec.dylib  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libz.tbd  /opt/homebrew/lib/libzstd.a  /opt/homebrew/Cellar/openssl@3/3.6.0/lib/libssl.dylib  /opt/homebrew/Cellar/openssl@3/3.6.0/lib/libcrypto.dylib  /opt/homebrew/lib/libgtest.a  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libcurl.tbd && cd /Users/carter/git/cpp-httplib/build/test && /opt/homebrew/bin/cmake -D TEST_TARGET=httplib-test -D TEST_EXECUTABLE=/Users/carter/git/cpp-httplib/build/test/httplib-test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/Users/carter/git/cpp-httplib/build/test -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D TEST_FILTER= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=httplib-test_TESTS -D CTEST_FILE=/Users/carter/git/cpp-httplib/build/test/httplib-test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=5 -D TEST_DISCOVERY_EXTRA_ARGS= -D TEST_XML_OUTPUT_DIR= -P /opt/homebrew/share/cmake/Modules/GoogleTestAddTests.cmake
Undefined symbols for architecture arm64:
  "_CFHostCancelInfoResolution", referenced from:
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long) in test.cc.o
  "_CFHostCreateWithName", referenced from:
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long) in test.cc.o
  "_CFHostGetAddressing", referenced from:
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long)::'lambda'(__CFHost*, CFHostInfoType, CFStreamError const*, void*)::operator()(__CFHost*, CFHostInfoType, CFStreamError const*, void*) const in test.cc.o
  "_CFHostScheduleWithRunLoop", referenced from:
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long) in test.cc.o
  "_CFHostSetClient", referenced from:
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long) in test.cc.o
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long) in test.cc.o
  "_CFHostStartInfoResolution", referenced from:
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long) in test.cc.o
  "_CFHostUnscheduleFromRunLoop", referenced from:
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long) in test.cc.o
      httplib::detail::getaddrinfo_with_timeout(char const*, char const*, addrinfo const*, addrinfo**, long) in test.cc.o
ld: symbol(s) not found for architecture arm64
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

threecgreen avatar Dec 10 '25 16:12 threecgreen