Opened 4 weeks ago
Last modified 3 weeks ago
#71089 new defect
Undefined curl symbols
Reported by: | tehcog (tehcog) | Owned by: | |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | base | Version: | 2.10.2 |
Keywords: | mavericks | Cc: | |
Port: |
Description
OS X 10.9.5 (13F1911) intel i7 x86_64 arch Darwin Kernel Version 13.4.0 Xcode 6.2, Build version 6C131e
When trying to create a bootstrap version of macports base for use with curl (to install curl into) as shown below:
> git clone -b release-2.10 https://github.com/macports/macports-base.git > cd macports-base > ./configure --prefix=/opt/bootstrap_2102 --with-applications-dir=/opt/bootstrap_2102/Applications --without-startupitems > make 2>&1 | tee ports_build.log && sudo make install
I am getting the following make error:
Undefined symbols for architecture x86_64: "_curl_url", referenced from: _CurlFetchCmd in curl.o "_curl_url_cleanup", referenced from: _CurlFetchCmd in curl.o "_curl_url_get", referenced from: _CurlFetchCmd in curl.o "_curl_url_set", referenced from: _CurlFetchCmd in curl.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[2]: *** [Pextlib.dylib] Error 1 make[1]: *** [all] Error 1 make: *** [all] Error 1
I have not had this issue with version 2.10.1
Attachments (1)
Change History (5)
Changed 4 weeks ago by tehcog (tehcog)
Attachment: | ports_build.log.xz added |
---|
comment:1 follow-up: 2 Changed 4 weeks ago by ryandesign (Ryan Carsten Schmidt)
Component: | ports → base |
---|---|
Keywords: | mavericks added |
Port: | MacPorts base removed |
Summary: | MacPorts @2.10.2 make error on Mavericks → Undefined curl symbols |
I see -I/opt/local/include
in the log, which means it probably found headers from MacPorts curl, but I do not see -L/opt/local/lib
in the log, meaning it then tried to link with the older macOS curl; this mismatch between newer header and older library probably accounts for the undefined symbols error in the log.
I recommend you use ./standard_configure.sh instead of ./configure; this will hide what's in your /opt/local MacPorts installation from this MacPorts build and should allow the build to succeed.
comment:2 Changed 4 weeks ago by tehcog (tehcog)
Replying to ryandesign:
I recommend you use
./standard_configure.sh
instead of./configure
; this will hide what's in your /opt/local MacPorts installation from this MacPorts build and should allow the build to succeed.
This seems to have worked. Thank you for your time.
comment:3 follow-up: 4 Changed 4 weeks ago by ryandesign (Ryan Carsten Schmidt)
I'm glad that worked! I'm not sure what would have changed between MacPorts 2.10.1 and the tip of the release-2.10 branch to have caused this though. I mean you can look at the full set of changes between 2.10.1 and the release-2.10 branch. It seems more likely that something changed in the ports that you had installed. For example, maybe you didn't have the curl and/or pkg-config ports installed before and now you do.
When you had used ./configure
, had you specified any other flags, such as a flag to tell it which curl to use? Or had you had the CFLAGS
, CPPFLAGS
, and/or LDFLAGS
environment variables set? (If so, to which values?) It seems like if the MacPorts build was going to automatically find your MacPorts curl installation, it should have picked up both the necessary CPPFLAGS
(the -I
flag) and the necessary LDFLAGS
(the -L
flag), not just one of them, since it finds it by using the output of curl-config --cflags
(which should print the -I
flag) and curl-config --libs
(which should print the -L
flag).
comment:4 Changed 3 weeks ago by tehcog (tehcog)
Replying to ryandesign:
When you had used
./configure
, had you specified any other flags, such as a flag to tell it which curl to use? Or had you had theCFLAGS
,CPPFLAGS
, and/orLDFLAGS
environment variables set? (If so, to which values?) It seems like if the MacPorts build was going to automatically find your MacPorts curl installation, it should have picked up both the necessaryCPPFLAGS
(the-I
flag) and the necessaryLDFLAGS
(the-L
flag), not just one of them, since it finds it by using the output ofcurl-config --cflags
(which should print the-I
flag) andcurl-config --libs
(which should print the-L
flag).
Typically I only use ./configure for this 'curl ports install' build, then install curl into that. I am referencing said installation (--prefix=/opt/bootstrap_2102) for curl usage - by the main ports install in /opt/local... - by configuring using '--with-curlprefix=/opt/bootstrap_2102'.
Based on your information, it sounds like something 'circular' may be going on.
The only other thing I may have done differently was 'clean' the previous 'curl ports install' - removing leaves - including pkgconfig. However, pkgconfig port was still available in the main ports install. This time I have setrequested pkgconfig in the 'curl ports install'. If you see something based on this new info that may be causing the issue, please let me know, otherwise we will see what happens next time.
Thanks Again
make log file