glibc überoptimiert?



  • beim compilieren eines programmes mit <ctime> tauchte beim ausführen plötzlich diese ausgabe auf:

    2552:     symbol=ctime;  lookup in file=./run
          2552:     symbol=ctime;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=ctime;  lookup in file=/lib/libm.so.6
          2552:     symbol=ctime;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=ctime;  lookup in file=/lib/libc.so.6
          2552:     symbol=malloc;  lookup in file=./run
          2552:     symbol=malloc;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=malloc;  lookup in file=/lib/libm.so.6
          2552:     symbol=malloc;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=malloc;  lookup in file=/lib/libc.so.6
          2552:     symbol=free;  lookup in file=./run
          2552:     symbol=free;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=free;  lookup in file=/lib/libm.so.6
          2552:     symbol=free;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=free;  lookup in file=/lib/libc.so.6
          2552:     symbol=_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc;  lookup in file=./run
          2552:     symbol=_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=_ZNSo6sentryC1ERSo;  lookup in file=./run
          2552:     symbol=_ZNSo6sentryC1ERSo;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=fwrite;  lookup in file=./run
          2552:     symbol=fwrite;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=fwrite;  lookup in file=/lib/libm.so.6
          2552:     symbol=fwrite;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=fwrite;  lookup in file=/lib/libc.so.6
          2552:     symbol=localtime;  lookup in file=./run
          2552:     symbol=localtime;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=localtime;  lookup in file=/lib/libm.so.6
          2552:     symbol=localtime;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=localtime;  lookup in file=/lib/libc.so.6
          2552:     symbol=asctime;  lookup in file=./run
          2552:     symbol=asctime;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=asctime;  lookup in file=/lib/libm.so.6
          2552:     symbol=asctime;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=asctime;  lookup in file=/lib/libc.so.6
          2552:     symbol=_ZNSt8ios_base4InitD1Ev;  lookup in file=./run
          2552:     symbol=_ZNSt8ios_base4InitD1Ev;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=_ZNSo5flushEv;  lookup in file=./run
          2552:     symbol=_ZNSo5flushEv;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=fflush;  lookup in file=./run
          2552:     symbol=fflush;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=fflush;  lookup in file=/lib/libm.so.6
          2552:     symbol=fflush;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=fflush;  lookup in file=/lib/libc.so.6
          2552:     symbol=_ZNSt13basic_ostreamIwSt11char_traitsIwEE5flushEv;  lookup in file=./run
          2552:     symbol=_ZNSt13basic_ostreamIwSt11char_traitsIwEE5flushEv;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=./run
          2552:     symbol=__cxa_finalize;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=/lib/libm.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=__cxa_finalize;  lookup in file=/lib/libc.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=./run
          2552:     symbol=__cxa_finalize;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=/lib/libm.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=__cxa_finalize;  lookup in file=/lib/libc.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=./run
          2552:     symbol=__cxa_finalize;  lookup in file=/usr/lib/libstdc++.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=/lib/libm.so.6
          2552:     symbol=__cxa_finalize;  lookup in file=/usr/lib/libgcc_s.so.1
          2552:     symbol=__cxa_finalize;  lookup in file=/lib/libc.so.6
    

    habe ich vielleicht die glibc überoptimiert beim compilieren von lfs 6.0?
    ich habe bis jetzt noch nicht bei google gesucht, weil mir suchbegriffe fehlen.

    für suchbegriffe oder problemlösungen wäre ich dankbar.

    mfg



  • mit dem gcc (nicht g++) tritt der fehler komischerweise nicht auf. kann es also
    kein fehler der glibc sein?
    hier der code der:

    #include <time.h>
    #include <stdio.h>
    
    int main()
    {
    	time_t rawtime;
    
    	time ( &rawtime );
    	printf ("%s", ctime (&rawtime) );
    
    	struct tm* time = localtime(&rawtime);
    	printf("%s", asctime(time));
    
    	return 0;
    }
    

    mfg



  • sowas verrücktes:
    c-quellcode in die cpp-datei kopiert, entsprechende header genommen, printf gegen std::cout ausgetauscht und siehe da: es geht!

    fehlerhafter c++-code:

    #include <iostream>
    #include <ctime>
    
    int main()
    {
    	time_t* rawTime;
    	time(rawTime);
    	std::cout << ctime(rawTime);
    
    	tm* time = localtime(rawTime);
    	std::cout << asctime(time);
    
            return 0;
    }
    

    korrekter c++-code:

    #include <iostream>
    #include <ctime>
    
    int main()
    {
    	time_t rawtime;
    
    	time ( &rawtime );
    	std::cout << ctime (&rawtime) << "\n";
    
    	struct tm* time = localtime(&rawtime);
    	std::cout << asctime(time) << "\n";
    
    	return 0;
    }
    

    ich würde mich trotzdem freuen, wenn mir jemand dieses verhalten erklären könnte.

    mfg



  • Ich kann dir das Verhalten nicht erklären, aber ich kann dir sagen, dass du im ersten Programm einen uninitialisierten Zeiger (schreibend) dereferenzierst.


Anmelden zum Antworten