我想编译一个libcurl(download)的例子。我用shell脚本尝试它。
#!/bin/bash
export CC=~/x-tools/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc
export XTOOLS_INCLUDE=$HOME/x-tools/$($CC -dumpmachine)/include
export XTOOLS_LIB=$HOME/x-tools/$($CC -dumpmachine)/lib
$CC -I$XTOOLS_INCLUDE -L$XTOOLS_LIB progressfunc.c -I$XTOOLS_INCLUDE -L$XTOOLS_LIB -lcurl
然后我启动脚本并得到以下错误:
$ ./make.sh
x86_64-unknown-linux-gnu-gcc: fatal error: no input files
compilation terminated.
shell脚本中的最后一行是错误的吗?
编辑#1:我将CPP和CXX更改为CC。
编辑#2:我将XTOOLS_LIBS更改为XTOOLS_LIB。
答案 0 :(得分:0)
您声明变量XTOOLS_LIBS
但使用XTOOLS_LIB
,即为空。结果,文件名被视为libs路径-L progressfunc.c
。小心。
答案 1 :(得分:0)
Libcurl依赖于很多其他库,需要一个静态标志-DCURL_STATICLIB。所以最好使用pkg-config。这是一个工作脚本。如果正确设置了CPP / CXX / EXECUTABLE_SUFFIX / PREFIX并且删除了-lpthread,它也适用于MinGW。
#!/bin/bash
export CC=~/x-tools/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc
export CXX=~/x-tools/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-g++
export exe_suffix=""
export PREFIX=$HOME/x-libs/$($CC -dumpmachine)
#echo "--" PREFIX=$PREFIX
export PKG_CONFIG_LIBDIR=$PREFIX/lib/pkgconfig
#echo "--" PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR
export CPPFLAGS=""
#echo "--" CPPFLAGS=$CPPFLAGS
export LDFLAGS=""
#echo "--" LDFLAGS=$LDFLAGS
export LDLIBS="$(pkg-config --libs --static libcurl)"
#echo "--" LDLIBS=$LDLIBS
export CFLAGS="$(pkg-config --cflags --static libcurl)"
#echo "--" CFLAGS=$CFLAGS
export CXXFLAGS="$CFLAGS"
#echo "--" CXXFLAGS=$CXXFLAGS
export pkg_config_cc="$CFLAGS $LDLIBS"
#echo "--" pkg_config_cc=$pkg_config_cc
export pkg_config_cxx="$CXXFLAGS $LDLIBS"
#echo "--" pkg_config_cxx=$pkg_config_cxx
export ldflags_cc="-w -g3 -std=c11"
#echo "--" ldflags_cc=$ldflags_cc
export ldflags_cxx="-w -g3 -std=c++17"
#echo "--" ldflags_cxx=$ldflags_cxx
export command="$CC $CPPFLAGS $LDFLAGS $ldflags_cc progressfunc.c -o progressfunc-$($CC -dumpmachine)$exe_suffix $pkg_config_cc -lpthread"
echo "--" command=$command
$command
echo