C++ Libs
-
- Beiträge: 6952
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
C++ Libs
Kennt einer von euch bekannte C++ Libs ?
Mir kommt da gerade nur QT in den Sinn. Aber da gibt es eine Brücke zu FPC.
Mit Java und C/C++ sehe ich rot
- af0815
- Lazarusforum e. V.
- Beiträge: 6845
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: C++ Libs
Ich weiß nur nicht mehr ob es hier oder im Englischen Forum war wo die Diskussion geführt wurde.
-
- Beiträge: 962
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: C++ Libs
Tensorflow, OpenCV, LLVM und die Arduino Bibliotheken für avr-embedded.
-
- Beiträge: 6952
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: C++ Libs
Stimmt, das ganze Arduino-Zeugs.Tensorflow, OpenCV, LLVM und die Arduino Bibliotheken für avr-embedded.
Dies wäre sicher noch praktisch, wen dies gehen würde.
So viel ich weis, ist die bei Arduino keine vollwertige Objektorientierung, so wie bei Desktop C++.
Auf dem AVR ist keine dynamische Speicherverwaltung möglich, somit können diese Objecte nur statisch verwendet werden.
Auf dem STM-32 sieht es schon ein wenig anders aus.
Die anderen Anwendungen musste ich erst googeln.
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6952
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: C++ Libs
Ist dies nicht etwa dies, wie es bei QT angewendet wird ?
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 962
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: C++ Libs
Nun, die Tatsache, dass die ganzen Objekte bei Arduino statisch sind, ist in dem Fall sogar ein Vorteil, weil dann FPC's nicht vollständige Unterstützung für cppclass genutzt werden kann. Für ein Beispiel siehe hier.Mathias hat geschrieben: So 27. Aug 2023, 13:05Stimmt, das ganze Arduino-Zeugs.Tensorflow, OpenCV, LLVM und die Arduino Bibliotheken für avr-embedded.
Dies wäre sicher noch praktisch, wen dies gehen würde.
So viel ich weis, ist die bei Arduino keine vollwertige Objektorientierung, so wie bei Desktop C++.
Auf dem AVR ist keine dynamische Speicherverwaltung möglich, somit können diese Objecte nur statisch verwendet werden.
Auf dem STM-32 sieht es schon ein wenig anders aus.

-
- Beiträge: 6952
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: C++ Libs
Der C++ Code hat genau eine Funktion:
Code: Alles auswählen
int myfunc() {
return 1234;
}
Code: Alles auswählen
gcc test.c -Wall -c
Code: Alles auswählen
program project1;
{$L test.o}
function myfunc(): Integer; cdecl; external;
begin
WriteLn(myfunc());
end.
Code: Alles auswählen
g++ test.c -Wall -c
Code: Alles auswählen
...
Verbose: Target OS: Linux for x86-64
Verbose: Compiling project1.lpr
Verbose: Linking /n4800/DATEN/Programmierung/mit_GIT/Lazarus/Tutorial/OpenGL_3.3/Versuche/Vulkan_Test/cpp_include/project1
Warning: linker: /usr/bin/ld.bfd: /n4800/DATEN/Programmierung/mit_GIT/Lazarus/Tutorial/OpenGL_3.3/Versuche/Vulkan_Test/cpp_include/lib/x86_64-linux/project1.o: in function `$main':
project1.lpr(6,0) Error: linker: undefined reference to `myfunc'
project1.lpr(7,1) Error: Error while linking
project1.lpr(7,1) Verbose: There were 1 errors compiling module, stopping
Verbose: Compilation aborted
Verbose: /home/tux/fpcupdeluxe_trunk/fpc/bin/x86_64-linux/ppcx64 returned an error exitcode
Klassen kommen nicht vor, aber es werden sonstige Funktionen von C++ benötigt.
Wie vector und stream Zeugs.
Aber Pascal Seitig brauche ich nur einen einfachen Zugriff, wie im obigen Beispiel.
Mit Java und C/C++ sehe ich rot
Re: C++ Libs
Code: Alles auswählen
extern "C"
-
- Beiträge: 6952
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: C++ Libs
Code: Alles auswählen
extern "C"{
int myfunc() {
return 12345678;
}
}
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6952
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: C++ Libs
Ich wollte die main mit meinem Programm verbinden, aber da macht leider "ld* nicht mit, es kommt eine riessen Schlange von Fehlern mit "undefined reference".
Code: Alles auswählen
...
// Das ganze C++ Programm
...
extern "C"{
int main1() {
printf("Hello World");
return 0;
}
}
extern "C"{
int main2() {
HelloTriangleApplication app;
try {
app.run();
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
}
Code: Alles auswählen
program project1;
{$L main.o}
{$LinkLib c}
{$LinkLib glfw}
{$LinkLib vulkan}
{$LinkLib dl}
{$LinkLib pthread}
{$LinkLib X11}
{$LinkLib Xxf86vm}
{$LinkLib Xrandr}
{$LinkLib Xi}
function main1(): Integer; cdecl; external;
function main2(): Integer; cdecl; external;
begin
main1();
end.
Code: Alles auswählen
g++ main.c -o main -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi
g++ main.c -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi -Wall -c
Vorher hatte ich nur die gemacht;
Code: Alles auswählen
g++ main.c -Wall -c
Dies mit dem EXPORTCALL habe ich auch probiert.
Code: Alles auswählen
#define EXPORTCALL __attribute__((stdcall))
extern "C"{
extern int EXPORTCALL main1() {
printf("Hello World");
return 0;
}
}
Da wrs es wenigsten übersichtlicher mit den Fehlern.
Code: Alles auswählen
{$linklib stdc++}
Code: Alles auswählen
...
Verbose: Target OS: Linux for x86-64
Verbose: Compiling project1.lpr
Verbose: Linking /n4800/DATEN/Programmierung/mit_GIT/Lazarus/Tutorial/OpenGL_3.3/Versuche/Vulkan_Test/Webcam_Lazarus_and_c_lib/project1
Warning: linker: /usr/bin/ld.bfd: /n4800/DATEN/Programmierung/mit_GIT/Lazarus/Tutorial/OpenGL_3.3/Versuche/Vulkan_Test/Webcam_Lazarus_and_c_lib/main.o: undefined reference to symbol '_Unwind_Resume@@GCC_3.0'
Warning: linker: /usr/bin/ld.bfd: /lib/x86_64-linux-gnu/libgcc_s.so.1: Fehler beim Hinzufügen von Symbolen: DSO missing from command line
project1.lpr(21,1) Error: Error while linking
project1.lpr(21,1) Verbose: There were 1 errors compiling module, stopping
Verbose: Compilation aborted
Verbose: /home/tux/fpcupdeluxe_trunk/fpc/bin/x86_64-linux/ppcx64 returned an error exitcode
Der Aufwand, das ich das machen will, ich wollte ein fertiges C++ Vulkan-Programm schrittweise nach Pascal portieren.
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6952
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: C++ Libs
Lazarus scheitert, sobald ich vector<char> in der clib verwende.
Code: Alles auswählen
#include <iostream>
#include <vector>
extern "C"{
void print() {
std::vector<char> buffer(1024);
printf("Hello\n");
}
}
Code: Alles auswählen
Projekt kompilieren, Ziel: /n4800/DATEN/Programmierung/mit_GIT/Lazarus/Tutorial/OpenGL_3.3/Versuche/Vulkan_Test/cpp_include/project1: Exit code 1, Fehler: 1, Warnungen: 2, Hinweise: 2
Warning: linker: /usr/bin/ld.bfd: /n4800/DATEN/Programmierung/mit_GIT/Lazarus/Tutorial/OpenGL_3.3/Versuche/Vulkan_Test/cpp_include/test.o: undefined reference to symbol '_Unwind_Resume@@GCC_3.0'
Warning: linker: /usr/bin/ld.bfd: /lib/x86_64-linux-gnu/libgcc_s.so.1: Fehler beim Hinzufügen von Symbolen: DSO missing from command line
Hint: Start of reading config file /home/tux/fpcupdeluxe_trunk/fpc/bin/x86_64-linux/fpc.cfg
Hint: End of reading config file /home/tux/fpcupdeluxe_trunk/fpc/bin/x86_64-linux/fpc.cfg
Target OS: Linux for x86-64
Compiling project1.lpr
Linking /n4800/DATEN/Programmierung/mit_GIT/Lazarus/Tutorial/OpenGL_3.3/Versuche/Vulkan_Test/cpp_include/project1
project1.lpr(11,1) Error: Error while linking
project1.lpr(11,1) Verbose: There were 1 errors compiling module, stopping
Verbose: Compilation aborted
Verbose: /home/tux/fpcupdeluxe_trunk/fpc/bin/x86_64-linux/ppcx64 returned an error exitcode
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 962
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: C++ Libs
-
- Beiträge: 6952
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: C++ Libs
Jetzt wird der Code wenigsten anstandslos kompiliert.
Aber der Versuch, der C++ Teil der Vulkan-Source will immer noch nicht ganz.
Das original Programm mit C++ mit folgender main() läuft einwandfrei.
Code: Alles auswählen
int main() {
HelloTriangleApplication app;
try {
app.run();
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Code: Alles auswählen
extern "C"{
extern int main2() { // neu
HelloTriangleApplication app;
try {
app.run();
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
}
Code: Alles auswählen
validation layer: vkCreateSwapchainKHR: Driver's function pointer was NULL, returning VK_SUCCESS. Was the VK_KHR_swapchain extension enabled?
ERROR: vkCreateSwapchainKHR: Driver's function pointer was NULL, returning VK_SUCCESS. Was the VK_KHR_swapchain extension enabled?
Abgebrochen (Speicherabzug geschrieben)
Code: Alles auswählen
g++ main.c -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi -Wall -c
Code: Alles auswählen
g++ main.c -o main -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi
Code: Alles auswählen
program project1;
uses
Math;
{$linklib stdc++}
//{$linklib gcc_s}
{$linklib gcc_eh}
{$LinkLib c}
{$LinkLib glfw}
{$LinkLib vulkan}
//{$LinkLib dl}
//{$LinkLib pthread}
//{$LinkLib X11}
//{$LinkLib Xxf86vm}
//{$LinkLib Xrandr}
//{$LinkLib Xi}
{$L main.o}
//function main1(): Integer; cdecl; external;
function main2(): Integer; cdecl; external;
begin
SetExceptionMask([exDenormalized, exInvalidOp, exOverflow, exPrecision, exUnderflow, exZeroDivide]);
// main1();
main2();
end.
An der Schutzverletzung an, könnte es ein anderes Speichermodell oder sonst was sein.
Wen ich ein reines FPC-Programm habe, wird mit "Runtime error 216..." quittiert.
Und bei einem reinem C++ Programm meistens "Abgebrochen (Speicherabzug geschrieben)"
Mit Java und C/C++ sehe ich rot