bcc icon indicating copy to clipboard operation
bcc copied to clipboard

Import of ".h" file for extern functions results in duplicate definitions

Open GWRon opened this issue 1 year ago • 2 comments

When importing a file which imports an ".h" file to define external function, this results in duplicate definitions: test.bmx

SuperStrict
Framework brl.standardio

Import "ext.bmx"

print test()
print "Done."

ext.bmx:

SuperStrict 
Import "external.h"

Extern 
	Function test:Int() = "int test()"
EndExtern

external.h:

#include <stddef.h>
#ifndef EXTERNAL_H
#define EXTERNAL_H

int test() { return 1; }
#endif

outputs:

./bmk makeapp -g x64 -t console -a -r -x "/bmx_tests/imports/test.bmx" (in directory: /BlitzMaxNG/bin)
[  9%] Processing:ext.bmx
[ 10%] Processing:test.bmx
[ 90%] Compiling:ext.bmx.release.linux.x64.c
[ 91%] Compiling:test.bmx.console.release.linux.x64.c
[100%] Linking:test
/usr/bin/ld: /bmx_tests/imports/.bmx/ext.bmx.release.linux.x64.o: in function `test':
ext.bmx.release.linux.x64.c:(.text+0x0): multiple definition of `test'; /bmx_tests/imports/.bmx/test.bmx.console.release.linux.x64.o:test.bmx.console.release.linux.x64.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
Compilation failed.
Build Error: Failed to link /bmx tests/imports/test

Renaming the external to "external.c" (and importing this instead) results in

1
Done.

Only "visible" difference I saw is when doing that import "external.h": this leads to gcc "-I"-ing the project folder

[ 10%] Processing:test.bmx
Tools/BlitzMaxNG/bin/bcc  -g x64 -v -r -h -s -w -f brl.standardio -t gui -p linux -o Projekte/Testcodes/bmx_tests/imports/.bmx/test.bmx.gui.release.linux.x64.s Projekte/Testcodes/bmx_tests/imports/test.bmx
Parsing...
Semanting...
Generating interface...
Generating header...
Generating source...
[ 90%] Compiling:ext.bmx.release.linux.x64.c
gcc -ITools/BlitzMaxNG/mod -ITools/BlitzMaxNG/mod/brl.mod/blitz.mod -ITools/BlitzMaxNG/mod/brl.mod/appstub.mod -ITools/BlitzMaxNG/mod/brl.mod/standardio.mod -IProjekte/Testcodes/bmx_tests/imports  -DNDEBUG  -w -DBMX_NG -fno-strict-aliasing -fpie -fno-exceptions -c -O3 -msse3 -s  -o Projekte/Testcodes/bmx_tests/imports/.bmx/ext.bmx.release.linux.x64.o Projekte/Testcodes/bmx_tests/imports/.bmx/ext.bmx.release.linux.x64.c
[ 91%] Compiling:test.bmx.gui.release.linux.x64.c
gcc -ITools/BlitzMaxNG/mod -ITools/BlitzMaxNG/mod/brl.mod/blitz.mod -ITools/BlitzMaxNG/mod/brl.mod/appstub.mod -ITools/BlitzMaxNG/mod/brl.mod/standardio.mod  -DNDEBUG  -w -DBMX_NG -fno-strict-aliasing -fpie -fno-exceptions -c -O3 -msse3 -s  -o Projekte/Testcodes/bmx_tests/imports/.bmx/test.bmx.gui.release.linux.x64.o Projekte/Testcodes/bmx_tests/imports/.bmx/test.bmx.gui.release.linux.x64.c
[100%] Linking:test
g++ -m64 -no-pie -fpie -pthread -o Projekte/Testcodes/bmx_tests/imports/test Tools/BlitzMaxNG/tmp/ld.tmp -L/usr/X11R6/lib -L/usr/lib
/usr/bin/ld: Projekte/Testcodes/bmx_tests/imports/.bmx/ext.bmx.release.linux.x64.o: in function `test':
ext.bmx.release.linux.x64.c:(.text+0x0): multiple definition of `test'; Projekte/Testcodes/bmx_tests/imports/.bmx/test.bmx.gui.release.linux.x64.o:test.bmx.gui.release.linux.x64.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
Build Error: Failed to link Projekte/Testcodes/bmx_tests/imports/test
Process complete

GWRon avatar Jul 06 '23 09:07 GWRon