This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi
I have encountered a pair of related problems producing a shared object (SO) file which exposes a C++ class.
First, consider the following non-C++ example. Here's the source for the SO file (libtest.c):
<<libtest.c>>
And here's the source for the test program (test.c):
<<test.c>>
If I build the SO file and test program using a command sequence supporting versioning (as is shown in the Shared Object File HOW-TO), such as:
gcc -fPIC -c libtest.c
ld -shared -soname libtest.so.1 -o libtest.so.1.0 -lc libtest.o
ldconfig -v -n .
ln -sf libtest.so.1 libtest.so
gcc -o test test.c -L. -ltest
Then I will see (only) the following output:
In main()
In Test()
As you can see, the constructor and destructor I included in the SO file are not executed.
If, however, I build the application without SO versioning, using the more-basic set of commands:
gcc -fPIC -c libtest.c
gcc -shared -o libtest.so libtest.o
gcc -o test test.c -L. -ltest
Then I will see the following output:
In InitSO()
In main()
In Test()
In ExitSO()
As you can see, the constructor and destructor that I included in the SO file are, in this case, properly executed.
That's problem #1; now, let's look at the C++ case. Here's the SO file source (libctest.cpp):
<<libctest.cpp>>
And here's the include file (libctest.h; which defines the class):
<<libctest.h>>
And, finally, the test program (ctest.cpp):
<<ctest.cpp>>
I build the SO file and test program using the following commands, similar to the (working) non-C++ example above:
gcc -fPIC -c libctest.cpp
gcc -shared -o libctest.so libctest.o
gcc -o ctest -L. -lctest -lstdc++ ctest.cpp
The output I get is:
In cTest::cTest()
In main()
In cTest::Test()
In cTest::~cTest()
As you can see, the (module-level) constructor and destructor in the SO file are NOT executed.
Does anyone have any insights into what's going wrong here?
TIA,
Scott
N. Scott Pearson
Staff S/W Architect, Intel Desktop Boards Operation
Desktop Platform Solutions Division, Intel Corporation
Desk 503-696-7818 Cell 503-702-6412
Fax 503-696-1015 Email scott.pearson@intel.com
Attachment:
libtest.c
Description: Binary data
Attachment:
test.c
Description: Binary data
Attachment:
libctest.cpp
Description: Binary data
Attachment:
libctest.h
Description: Binary data
Attachment:
ctest.cpp
Description: Binary data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |