【问题标题】:Linking curl after compiling fails in netbeans build在netbeans构建中编译失败后链接curl
【发布时间】:2011-09-27 16:22:12
【问题描述】:

如果我试试这个

g++ -o testApp main.cpp -I/usr/local/include -L/usr/local/lib -lcurl -lssl -lcrypto -lz -lz

效果很好……

但是如果我想直接使用 netbeans 运行我的示例应用程序,它会给我一些错误。

这里是 Makefile-Debug.mk 的一部分

# Build Targets
.build-conf: ${BUILD_SUBPROJECTS}
    "${MAKE}"  -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/SampleApp.exe

${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/SampleApp.exe: ${OBJECTFILES}
    ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}
    ${LINK.cc} -I/usr/local/lib -lcurl -lssl -lcrypto -lz -lz -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/SampleApp ${OBJECTFILES} ${LDLIBSOPTIONS}

${OBJECTDIR}/main.o: main.cpp
    ${MKDIR} -p ${OBJECTDIR}
    ${RM} $@.d
    $(COMPILE.cc) -g -MMD -MP -MF $@.d -o ${OBJECTDIR}/main.o main.cpp

netbeans 构建输出的结果:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .clean-conf
make[1]: Entering directory `/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp'
rm -f -r build/Debug
rm -f dist/Debug/Cygwin-Windows/SampleApp.exe
make[1]: Leaving directory `/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp'

CLEAN SUCCESSFUL (total time: 1s)
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin-Windows/SampleApp.exe
make[2]: Entering directory `/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp'
mkdir -p build/Debug/Cygwin-Windows
rm -f build/Debug/Cygwin-Windows/main.o.d
g++.exe    -c -g -MMD -MP -MF build/Debug/Cygwin-Windows/main.o.d -o build/Debug/Cygwin-Windows/main.o main.cpp
mkdir -p dist/Debug/Cygwin-Windows
g++.exe     -I/usr/local/lib -lcurl -lssl -lcrypto -lz -lz -o dist/Debug/Cygwin-Windows/SampleApp build/Debug/Cygwin-Windows/main.o -L/usr/local/lib
build/Debug/Cygwin-Windows/main.o: In function `main':
/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp/main.cpp:23: undefined reference to `_curl_easy_init'
/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp/main.cpp:25: undefined reference to `_curl_easy_setopt'
/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp/main.cpp:28: undefined reference to `_curl_easy_setopt'
/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp/main.cpp:29: undefined reference to `_curl_easy_setopt'
make[2]: Leaving directory `/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp'
/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp/main.cpp:31: undefined reference to `_curl_easy_perform'
make[1]: Leaving directory `/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp'
/cygdrive/c/Users/<MY_USERNAME>/Documents/NetBeansProjects/SampleApp/main.cpp:32: undefined reference to `_curl_easy_cleanup'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/Cygwin-Windows/SampleApp.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 2s)

这里有什么问题...?

【问题讨论】:

  • 用这个订单修复了它${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/gamedbot ${OBJECTFILES} -I/usr/local/lib -lcurl -lssl -lcrypto -lz -lz ${LDLIBSOPTIONS}这个工作:)

标签: c++ netbeans curl build cygwin


【解决方案1】:

-L 选项需要位于您在命令行中使用 -l 指定的库之前。

因此,如果您需要 -L/usr/local/lib 用于 libcurl(如在您的小示例中),您需要首先将 -L 指定到正确的目录,然后将 -l 指定为正确的 lib名字。

【讨论】:

  • 我已经尝试过了,但链接很好。该命令对结果没有影响。编译:$(COMPILE.cc) -g -MMD -MP -MF $@.d -o ${OBJECTDIR}/main.o main.cpp 链接:${LINK.cc} ${LDLIBSOPTIONS} -I/usr/local/lib -lcurl -lssl -lcrypto -lz -lz -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/SampleApp ${OBJECTFILES} 我觉得编译有问题
  • “链接很好”,但您从 ld 得到错误?对不起,你把我弄丢了……
  • 还是谢谢你。是的,我提供 g++ 的选项顺序无效。如果我先提供-lcurl 然后提供-L/usr/local/lib 或以相反的顺序提供,没有区别。看起来 g++ 很聪明,可以弄清楚。
  • 抱歉,顺序 很重要(请参阅手册页等),如果不是您的情况,那么其他东西对您来说很特别
  • 对于将来看到这一点的任何人,在 netbeans 中,您可以将 -lcurl 添加到您的 properties=>build->Linker->libraries 以将其正确附加到编译器命令的末尾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 2016-10-05
相关资源
最近更新 更多