ah okay, I had problems with the ".a" suffix myself, so I though it was
worth a shot.
I just know that this
>//#cgo LDFLAGS: $GOPATH/src/kflow/libcolor/lib/libCOLOR
won't work, as the env variables won't be resolved by go afaik.
maybe test it with an absolute path instead
and/or use "go build -n" to see how go would invoke "link"
and maybe you need to link against "libboost_system" and "libxml2" as well,
if "libCOLOR" really depends on it.
Am Mittwoch, 1. März 2017 20:04:50 UTC+1 schrieb Chun Zhang:
>
> Yes, I tried quite a few varieties, such as:
> //#cgo LDFLAGS: $GOPATH/src/kflow/libcolor/lib/libCOLOR with/without .a
> //#cgo LDFLAGS: ${SRCDIR}kflow/libcolor/lib/libCOLOR with/without .a
> //#cgo LDFLAGS: -L${SRCDIR}kflow/libcolor/lib -l:libCOLOR with/without .a
> //#cgo LDFLAGS: -L${SRCDIR}kflow/libcolor/lib -lCOLOR with/without .a
>
> None above works for me so far, they are simply ignored during the
> building process. I even played with the empty spaces at various places,
> still no luck :(
>
> Thanks,
> Chun
>
>
> On Wednesday, March 1, 2017 at 1:57:15 PM UTC-5, therecipe wrote:
>>
>> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.