This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug plugins/54069] New: linkage type of plugin API wrong
- From: "weinert at gns-mbh dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 23 Jul 2012 08:38:29 +0000
- Subject: [Bug plugins/54069] New: linkage type of plugin API wrong
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54069
Bug #: 54069
Summary: linkage type of plugin API wrong
Classification: Unclassified
Product: gcc
Version: 4.7.1
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: plugins
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: weinert@gns-mbh.com
Created attachment 27856
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27856
plugin source
gcc 4.7.0 and 4.7.1
created with:
./configure --prefix=/usr/local --program-suffix=-4.7.1 --with-mpc=/usr/local
--with-mpfr=/usr/local --with-gmp=/usr/local --enable-serial-configure
--enable-languages=c,c++,fortran,objc,obj-c++
plugin (see attached source) compiled with:
gcc-4.7.1 -I`gcc -print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o
plugin.so
try to use with:
gcc-4.7.1 -fplugin=./plugin.so test.c
where test.c is simply:
int main(int argc, char *argv[]) { return 0; }
or may be any other source, doesn't matter, the test plugin does nothing...
generates following error lines:
cc1: error: cannot load plugin ./plugin.so
./plugin.so: undefined symbol: list_length
Looking at the generated compiler (libgcc, gcc-executable, etc.) it seems that
presumably all functions from tree.h, input.h, and many others seem to have
C++-linkage though they are part of a C-API. Using
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
.... declarations ....
#ifdef __cplusplus
} /* extern "C" */
#endif /* __cplusplus */
in those headers cures the problem (after long recompile)...
the function used in the plugin is only example, there are tons(!!) of others
there that have the same problem..
it would be great if you could restore ability to use C for the plugin-API..
thanks...