Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [ solved ] kan geen executable meer maken.  (gelezen 5217 keer)

Offline kuifje09

  • Lid
[ solved ] kan geen executable meer maken.
« Gepost op: 2023/10/24, 21:29:01 »
Wat er gaande is, geen idee. maar in eerste instantie liep ik op tegen een probleem met eclipse.
Maar...
Het is mogelijk wat anders.

Zelfs het meest simpele helloworld.c compileren gaat niet goed.

Er wordt altijd een shared library gemaakt i.p.v. een executable.

De standaard helloworld.c

#include<stdio.h>
#include<stdlib.h>

int main(){

printf("hello all\n");

return 0;
};

compileren : cc myHelloWorld.c -o myHelloWorld -Wall

geeft  vervolgens een "ding" dat ik wel kan executen :  output  >>hello all

maar als ik met file kijk of in de filemanager kijk..( foute ikoon ). dan is het geen executable. In detail is het dan:

myHelloWorld: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0fc5f76bf3b86f663be3137cd14396772fad94cd, for GNU/Linux 3.2.0, not stripped

Wat kan dat zijn, ik wordt er helemaal tureluurs van...

update: wellicht handig te weten,  gewoon op ubuntu
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"

In de filemanager "File" krijg ik dit als ik op de "executable" click:

There is no application installed for "shared library" files
« Laatst bewerkt op: 2023/10/25, 15:33:14 door kuifje09 »

Offline kuifje09

  • Lid
Re: kan geen executable meer maken.
« Reactie #1 Gepost op: 2023/10/25, 14:19:26 »
Heeft dit er mogenlijk iets mee te maken ?

<url>https://stackoverflow.com/questions/43367427/32-bit-absolute-addresses-no-longer-allowed-in-x86-64-linux<\url>

geen we even testen,  gcc  -fno-pie -no-pie -o ......

Nu hebben we een echte executable. die ook in de "File", dat is dus nautilus, ( waarom zouden we de echte naam verbergen ?) wordt gezien als een executable.  geen shared lib.

Maar wat is de gedachte hierachter ?  Ik bedoel, ergens spoort er iets niet....

Nu testen of we dat in eclipse kunnen platslaan...

Offline bart85

  • Lid
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline kuifje09

  • Lid
Re: kan geen executable meer maken.
« Reactie #3 Gepost op: 2023/10/25, 14:55:50 »
Jammer dat er niet zoveel respons is hier, maar ik ben weer een stapje verder.

Het heeft kennelijk te maken met een andere kijk op de wereld.

Geen idee waar de wereld ineens de andere kant op is gaan draaien, maar simpele programmaas kan ik ik nog tot executable maken,
met de fno-pie en no-pie vlaggen .  Heeft kennelijk iste van doen met "verkeerde" shared libraries?  mijn lichtje gaat hier uit...

Maar de "semie" executables zijn wel op de commandline te starten en lopen alsof het een executable is.

Ik begrijp er geen snars mee van.


Offline kuifje09

  • Lid
Re: kan geen executable meer maken.
« Reactie #4 Gepost op: 2023/10/25, 15:16:35 »
Dank je Bart voor de link.

Ik heb het gelezen, maar kan er niet veel mee. er zijn nog wat platsen waar ik dit soort dingen tegenkom.

Vandaar dat ik wilde compileren met die -fnopie -no-pie. maar als ik dat binnen eclipse gebruik, gaat eclipse klagen.

Dus op de commandline gaat het okee, maar in eclipse :

Building target: helloWorld
Invoking: GCC C Linker
gcc  -o "helloWorld"  ./src/helloWorld.o   
/usr/bin/ld: ./src/helloWorld.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
make: *** [makefile:43: helloWorld] Error 1
"make all" terminated with exit code 2. Build might be incomplete.


Offline kuifje09

  • Lid
Re: kan geen executable meer maken.
« Reactie #5 Gepost op: 2023/10/25, 15:32:13 »
Wouwwwww, gevonden.

De -fno-pie is voor de compiler,  de -no-pie is voor de linker.

Ik heb nu de extra opties/vlaggen ook in het "linker"deel opgenomen. dus

de GCC-Compiler - Miscellaneos   -fno-pie

de GCC-Linker - Miscellaneos -no-pie

Dat lijkt te werken. Het produceerd nu een "echte"executable.

file helloWorld
helloWorld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=9ac55127caf8599898046063c9a1968993e28c10, for GNU/Linux 3.2.0, not stripped


Dus, opgelost ? Ik kan weer verder, maar de achtergrond begrijp ik niet helemaal. Zal wel met nieuwe inzichten te maken hebben ?
Terwijl ik dacht dat executables altijd al adres onafhankelijk waren..