tarantool / nginx_upstream_module

Tarantool NginX upstream module (REST, JSON API, websockets, load balancing)
Other
174 stars 18 forks source link

Can't compile as shared object #114

Open donbarthel opened 6 years ago

donbarthel commented 6 years ago

make build-all-dynamic gives error: /usr/bin/ld: /home/user/Code/nginx_upstream_module/third_party/yajl/build/yajl-2.1.0/lib/libyajl_s.a(yajl.c.o): relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

It appears to me that the yajl library is statically linked into our dynamic library but the Makefile for yajl compiles without the needed -fPIC flag. The -fPIC flag is used only when the yajl library is dynamically linked.

My work around is to specify the -fPIC flag for all compiles of yajl.

Change in ./third_party/yajl/CMakeLists.txt: SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") to: SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")

dedok commented 6 years ago

Sorry for long the answer, was offline. Thank you for the report!

Yep, this looks like a bug. Which operating system did you use? And did you use GCC and CLang?

donbarthel commented 6 years ago

I'm using Ubuntu 16.04 compiling with GCC.

dedok commented 5 years ago

Not sure how it could be fixed. Probably patch for Yajl? Or PR into yajl repo? What do you think?

Totktonada commented 5 years ago

We can conditionally set -fPIC flag: enable it only for dynamic build.

Totktonada commented 5 years ago

The question here is about yajl in the submodule. Everything work with system-wide yajl (at least for me).