Das Notes Forum

Lotus Notes / Domino 9 => ND9: Entwicklung => Thema gestartet von: SteffenKaPunkt am 15.07.20 - 15:21:31



Titel: C-API - Codeblocks - main entry point
Beitrag von: SteffenKaPunkt am 15.07.20 - 15:21:31
Hallo Leute,

ich versuche mittels Codeblocks bei einer C-Anwendung den Mein-Entry-Point auf "AddInMain" zu setzen. Hat da jemand Erfahrung, wie dies geschieht? Also Standard-Compilter wird dort der gcc genutzt.

Viele Grüße


Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: eknori am 15.07.20 - 16:46:56
Code:
STATUS LNPUBLIC AddInMain ( HMODULE hModule, int argc, char *argv[])

Du musst aber dann auch die entsprechenden obj libs linken, und min. addin.h includen


Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: SteffenKaPunkt am 15.07.20 - 18:04:37
Hallo Ulrich,

dass mit der addin.h hatte ich bereits erledigt. Jedoch bin ich mir nicht sicher, ob notes0.obj oder notesai0.obj mit gelinkt werden muss. Und wo um alles in der Welt hinterlege ich die notesxx0.obj in CodeBlocks?

Viele Grüße


Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: eknori am 15.07.20 - 18:08:19
Du musst beide files linken.
Unterstützt codeblocks keine make files?

Wenn darunter ein gcc liebt, dann kannst du doch make files verwenden. Die sind ja fertig in den samples.

Ich selber verwende boost build.


Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: eknori am 15.07.20 - 18:12:46
Mal schnell Tante Googe befragt

Zitat
1. Choose Project, Build Options.

The Project Build Options dialog box appears.

2. Click the Linker Settings tab.
3. Click the Add button.
4. In Add Library dialog box, click the Ellipsis (…) button to browse to the location of the library file.



Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: SteffenKaPunkt am 15.07.20 - 18:18:29
Wenn ich die beiden .-obj-Files in den Linker-Settings eintrage und den Rebuild anstoße erhalte ich diese Meldungen:

D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0x2b)||undefined reference to `NotesInitExtended'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0x46)||undefined reference to `NotesSDKMAINInitError'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0xaf)||undefined reference to `NotesSDKMAINCommandLineBegin'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0xca)||undefined reference to `NotesSDKMAINInitError'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0xf9)||undefined reference to `NotesTerm'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0x112)||undefined reference to `NotesTerm'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0x13c)||undefined reference to `NotesSDKMAINInit'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0x17d)||undefined reference to `NotesSDKMAINError'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0x1c7)||undefined reference to `NotesSDKMAINCommandLineEnd'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[notes_main]+0x1cc)||undefined reference to `NotesTerm'|
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[WinMain]+0x25)||undefined reference to `NotesSDKMAINParseArgs'|
D:\_entwicklung\notesapi901\lib\mswin64\notesai0.obj:(.text[NotesMain]+0x10)||undefined reference to `AddInSDKInit'|
D:\_entwicklung\notesapi901\lib\mswin64\notesai0.obj:(.text[NotesMain]+0x24)||undefined reference to `NotesInitModule'|
D:\_entwicklung\notesapi901\lib\mswin64\notesai0.obj:(.text[NotesMain]+0x3b)||undefined reference to `AddInSDKTerm'|


Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: eknori am 15.07.20 - 18:19:46
Du musst auch die notes.lib linken


Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: eknori am 15.07.20 - 18:28:31
Auf welchem OS machst Du das Ganze? Weil GCC und win64. Finde den Fehler


Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: SteffenKaPunkt am 15.07.20 - 18:31:56
Die lib ist mit angegeben. Ich glaube ich habe einen ersten Teilerfolg. Ich hatte die obj-Files nicht bei den Linker-Settings für das Release angegeben, sondern eine Ebene drüber.

Dennoch erhalte ich vom Linker einen Fehler zurück (siehe letzte Zeile).

g++.exe -Os -fexceptions -Os -ID:\_entwicklung\notesapi901\include -ID:\_entwicklung\notesapi901\lib -c C:\_entwicklung\CodeBlocks\TestCodeblocks\main.cpp -o obj\Release\main.o
g++.exe -LD:\_entwicklung\notesapi853\lib\mswin64 -o bin\Release\TestCodeblocks.exe obj\Release\main.o  -s -static  D:\_entwicklung\notesapi901\lib\mswin64\notes.lib D:\_entwicklung\notesapi901\lib\mswin64\notesai0.obj D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj D:\_entwicklung\notesapi901\lib\mswin64\notes.lib D:\_entwicklung\notesapi901\lib\mswin64\notesai0.obj D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj
D:\_entwicklung\notesapi901\lib\mswin64\notesai0.obj:(.text[NotesMain]+0x0): multiple definition of `NotesMain'
D:\_entwicklung\notesapi901\lib\mswin64\notesai0.obj:(.text[NotesMain]+0x0): first defined here
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[main]+0x0): multiple definition of `main'
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[main]+0x0): first defined here
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[WinMain]+0x0): multiple definition of `WinMain'
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj:(.text[WinMain]+0x0): first defined here
collect2.exe: error: ld returned 1 exit status


Folgende Reihenfolge bei den Linker-Settings habe ich verwendet:

D:\_entwicklung\notesapi901\lib\mswin64\notes.lib
D:\_entwicklung\notesapi901\lib\mswin64\notesai0.obj
D:\_entwicklung\notesapi901\lib\mswin64\notes0.obj


PS: CodeBlocks 20.04 ist standardmäßig auf 64bit gestellt.


Titel: Re: C-API - Codeblocks - main entry point
Beitrag von: eknori am 15.07.20 - 18:40:07
Ich denke, du solltest noch einmal Deine Entwicklungsumgebung überdenken. Was Du verwendest ist alles andere als Standard und weit entfernt von supported.
Ich kenne niemanden, der mit einem GCC ein lauffähiges binary für Windooze gebaut hat.

Für 9.0.1 + ist VS 2010 angesagt. Unter Linux, GCC. Beim OS muss man dann aber schon wieder differenzieren, für welche Domino Version man das bauen möchte.

Steht aber Alles in der Anleitung zur cAPI SDK.