did you try it without the ".a" suffix in the LDFLAGS? Am Dienstag, 28. Februar 2017 20:06:20 UTC+1 schrieb Chun Zhang: > > Hi, All, > > I have googled quite a bit about this issue, there are some tutorials > online. But most of them targeted either at older go releases or C instead > of C++. > > Can somebody please help me to figure out how to solve the following > issues? > > I have to use a static library, wrote in C++ in a go project. I have the > libcolor.a and the COLOR.h header file, the libcolor.a relies on some other > libraries, such as libboost_system.a, libxml2.a etc to build. > > I wrote a libcolor.swigcxx file as follows: > --------------------------- > %module libcoror > > %{ > #include "include/COLOR.h" > #include <stddef.h> > #include <vector> > > /* This is where we initialize any global parameters that are not > search-thread specific */ > extern void COLOR_init_global_config(int argc, char *argv[]); // from the > COLOR.h file, which is one of the APIs I would like to use > > %} > > #include "include/COLOR.h" > extern void COLOR_init_global_config(int argc, char *argv[]); > --------------------------- > > An empty libcolor.go file with the following lines was manually created > > --------------------------- > package libcolor > > // #cgo CFLAGS: -I . > // #cgo CXXFLAGS: -std=c++11 <--- this does not seem to work > // #cgo LDFLAGS: -L${SRCDIR}/lib/ -lCOLOR.a -lz <--- this is placed at the > correct place > --------------------------- > > When I tried to build this using "go build -x" CLI, I hit the following > error: > > WORK=/tmp/go-build797493895 > mkdir -p $WORK/klow/libcolor/_obj/ > mkdir -p $WORK/klow/ > swig -version > cd $WORK > /usr/local/go/pkg/tool/linux_amd64/compile -o ./klow/libcolor/_obj/_go_.o > -trimpath . -p main -complete -buildid > 73a7f9534f74346db4b3e0f48875da9dbf8bc2fd -D _$WORK ./swig_intsize.go > cd /home/chzhang/go/src/klow/libcolor > swig -go -cgo -intgosize 64 -module libcolor -o > $WORK/klow/libcolor/_obj/libcolor_wrap.cxx -outdir > $WORK/klow/libcolor/_obj/ -c++ libcolor.swigcxx > CGO_LDFLAGS="-g" "-O2" /usr/local/go/pkg/tool/linux_amd64/cgo -objdir > $WORK/klow/libcolor/_obj/ -importpath klow/libcolor -- -I > $WORK/klow/libcolor/_obj/ $WORK/klow/libcolor/_obj/libcolor.go > cd $WORK > gcc -fdebug-prefix-map=a=b -c trivial.c > gcc -gno-record-gcc-switches -c trivial.c > cd /home/chzhang/go/src/klow/libcolor > gcc -I . -fPIC -m64 -pthread -fmessage-length=0 > -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -I > $WORK/klow/libcolor/_obj/ -g -O2 -o $WORK/klow/libcolor/_obj/_cgo_main.o -c > $WORK/klow/libcolor/_obj/_cgo_main.c > gcc -I . -fPIC -m64 -pthread -fmessage-length=0 > -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -I > $WORK/klow/libcolor/_obj/ -g -O2 -o $WORK/klow/libcolor/_obj/_cgo_export.o > -c $WORK/klow/libcolor/_obj/_cgo_export.c > gcc -I . -fPIC -m64 -pthread -fmessage-length=0 > -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -I > $WORK/klow/libcolor/_obj/ -g -O2 -o > $WORK/klow/libcolor/_obj/_tmp_go-build797493895_klow_libcolor__obj_libcolor.cgo2.o > > -c > $WORK/klow/libcolor/_obj/_tmp_go-build797493895_klow_libcolor__obj_libcolor.cgo2.c > g++ -I . -fPIC -m64 -pthread -fmessage-length=0 > -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -I > $WORK/klow/libcolor/_obj/ -g -O2 -o > $WORK/klow/libcolor/_obj/_tmp_go-build797493895_klow_libcolor__obj_libcolor_wrap.cxx.o > > -c $WORK/klow/libcolor/_obj/libcolor_wrap.cxx > # klow/libcolor > In file included from $WORK/klow/libcolor/_obj/libcolor_wrap.cxx:243:0: > ./include/COLOR.h:13:43: warning: defaulted and deleted functions only > available with -std=c++11 or -std=gnu++11 > PerSessionData(const PerSessionData &d)=default; > ^ > ./include/COLOR.h:14:53: warning: defaulted and deleted functions only > available with -std=c++11 or -std=gnu++11 > PerSessionData& operator=(const PerSessionData&d)=default; > ^ > g++ -I . -fPIC -m64 -pthread -fmessage-length=0 > -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -o > $WORK/klow/libcolor/_obj/_cgo_.o $WORK/klow/libcolor/_obj/_cgo_main.o > $WORK/klow/libcolor/_obj/_cgo_export.o > $WORK/klow/libcolor/_obj/_tmp_go-build797493895_klow_libcolor__obj_libcolor.cgo2.o > > $WORK/klow/libcolor/_obj/_tmp_go-build797493895_klow_libcolor__obj_libcolor_wrap.cxx.o > > -g -O2 > # klow/libcolor > /tmp/go-build797493895/klow/libcolor/_obj/_tmp_go-build797493895_klow_libcolor__obj_libcolor_wrap.cxx.o: > > In function `_wrap_COLOR_init_global_config_libcolor_3cea422eb6211fe0': > /tmp/go-build/klow/libcolor/_obj/libcolor_wrap.cxx:285: undefined > reference to `COLOR_init_global_config(int, char**)' > collect2: error: ld returned 1 exit status > > > Looks like there are two errors: > 1, the C++11 warning > 2, the linker can't find the function COLOR_init_global_config in the > static library. That means the compiler directives I defined in libcolor.go > was not successfully passed to the compiler. From the log, looks like > another libcolor.go was generated in the $WORK directory by swig. The one I > manually created was not used at all. > > Can somebody please help me to figure out what I need to do to get this > compiled? The tutorial on swig.org does not seem to help. I tried to > manually build as in > > http://zacg.github.io/blog/2013/06/06/calling-c-plus-plus-code-from-go-with-swig/ > But the 6c etc go tools does not exist anymore. > > > Thanks, > Chun > > -------------------------------- > > This is my setup > go version go1.7.1 linux/amd64 > GOARCH="amd64" > GOBIN="" > GOEXE="" > GOHOSTARCH="amd64" > GOHOSTOS="linux" > GOOS="linux" > GOPATH="/home/chzhang/go" > GORACE="" > GOROOT="/usr/local/go" > GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" > CC="gcc" > GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 > -fdebug-prefix-map=/tmp/go-build155119108=/tmp/go-build > -gno-record-gcc-switches" > CXX="g++" > CGO_ENABLED="1" > > >
-- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.