Debian gcc undesirable behaviour

47 Views Asked by At

I am creating a gcc shared library having a static library dependency.

I compile the parts for static library as following:

gcc -c -m64 -O2 -fPIC -std=c99 -Wall  ms*.c //there are 10 C files, no warnings

Next I create a static library with:

ar rc static_lib.a ms*.o

Next I compile the parts for my program as following:

g++ -c -m64 -O2 -fPIC -std=c++14 -Wall  ab*.cpp //there are 5 C++ files, just -Wunused-variable warnings

Then I create a shared library as following:

g++ -shared -g -Wall ab*.o static_lib.a -o shared_lib.so

in the normal case, this shared_lib.so will be called by a Ruby program using a foreign function interface. There is no problem if I do it on ubuntu or mac(.dylib), but if I try this on debian stretch I get an error related to the static library as if the configurations are not set properly. If I run the application without foreign function interface, such as creating a tester and running with the cpp file main function as following:

> g++ -o library_test ab*.o static_lib.a
> ./library_test

There is no problem!

My question is what kind of configuration for creating a shared library may be missing here to not get that undesirable behaviour. Especially on debian stretch 9.5! Or is there a way that I can understand if there is a problem in the shared library.

1

There are 1 best solutions below

2
On BEST ANSWER

From the comments, you indicate the problem is with a #define. Those are preprocessor directives. Libraries are for the linker.

You might be confused because g++ does include the preprocessor phase, and might call the linker depending on the requested output. Still, g++ follows the C++ language rules.