LINUX.ORG.RU

Глюк с gcc


0

0

Нужно откомпилить один кусок кода на C++. gcc выдает странные ошибки. Дошел до того, что стал брать примеры из книжек. Вот примитивный кусок кода

#include <iostream> using namespace std;

int main() { int i, j; double d;

i = 10; j = 20; d = 99.101;

cout << "Вот несколько чисел: "; cout << i; cout << ' '; cout << j; cout << ' '; cout << d;

return 0; }

Вот что получается

14:20:38[tigra@tigra3]~/bin/tmp/examples> gcc ./Exampl1_1.cpp

/tmp/ccU83y8x.o(.text+0x37): In function `main': : undefined reference to `std::cout' /tmp/ccU83y8x.o(.text+0x3c): In function `main': : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' /tmp/ccU83y8x.o(.text+0x4a): In function `main': : undefined reference to `std::cout' /tmp/ccU83y8x.o(.text+0x4f): In function `main': : undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)' /tmp/ccU83y8x.o(.text+0x5c): In function `main': : undefined reference to `std::cout' /tmp/ccU83y8x.o(.text+0x61): In function `main': : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)' /tmp/ccU83y8x.o(.text+0x6f): In function `main': : undefined reference to `std::cout' /tmp/ccU83y8x.o(.text+0x74): In function `main': : undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)' /tmp/ccU83y8x.o(.text+0x81): In function `main': : undefined reference to `std::cout' /tmp/ccU83y8x.o(.text+0x86): In function `main': : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)' /tmp/ccU83y8x.o(.text+0x97): In function `main': : undefined reference to `std::cout' /tmp/ccU83y8x.o(.text+0x9c): In function `main': : undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(double)' /tmp/ccU83y8x.o(.text+0xc8): In function `__static_initialization_and_destruction_0(int, int)': : undefined reference to `std::ios_base::Init::Init[in-charge]()' /tmp/ccU83y8x.o(.text+0xf7): In function `__tcf_0': : undefined reference to `std::ios_base::Init::~Init [in-charge]()' /tmp/ccU83y8x.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status

ЧТО ДЕЛАТЬ? Попробовал на другой машине - тоже самое. И там и там дистр SuSE 9.1

14:20:38[tigra@tigra3]~/bin/tmp/examples> gcc -v Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.3/specs Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --disable-checking --libdir=/usr/lib --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux Thread model: posix gcc version 3.3.3 (SuSE Linux)

Странно это как-то. Посоветуйте, пожалуйста, что не так?


ребят, забыл проформатирование, извините.

но основной смысл понятен

boatman
() автор топика
Ответ на: комментарий от boatman

Все это продолжение одной истории с паролями Sim'а
http://www.linux.org.ru/jump-message.jsp?msgid=1022169
Необходимо восстановить пароль из его конфига. Выдрал пару кусков кода, пытаюсь завести.

14:45:36[tigra@tigra3]~/bin/tmp> cat ./sim_pwd.cpp
#include <iostream>
#include</usr/lib/qt3/include/qstring.h>
using namespace std;

#define PASS "$431c$4376$4312$4374$430e$4349$4323$4348"

//EXPORT
string getToken(string &from, char c, bool bUnEscape)
{
    string res;
    unsigned i;
    for (i = 0; i < from.length(); i++){
        if (from[i] == c)
            break;
        if (from[i] == '\\'){
            if (!bUnEscape)
                res += '\\';
            i++;
            if (i >= from.length())
                break;
            if (bUnEscape){
                char c = from[i];
                switch (c){
                case 'n':
                    c = '\n';
                    break;
                case 'r':
                    c = '\r';
                    break;
                case 't':
                    c = '\t';
                    break;
                }
                res += c;
            }else{
                res += from[i];
            }
            continue;
        }
        res += from[i];
    }
    if (i < from.length()){
        from = from.substr(i + 1);
    }else{
        from = "";
    }
    return res;
}

int main (void)
{
    QString pswd = PASS;
    if (pswd.length() && (pswd[0] == '$')) {
        pswd = pswd.mid(1);
        QString new_pswd;
        unsigned short temp = 0x4345;
        QString tmp;
        do {
            QString sub_str = getToken(pswd, '$');
            temp ^= sub_str.toUShort(0,16);
            new_pswd += tmp.setUnicodeCodes(&temp,1);
            temp = sub_str.toUShort(0,16);
        } while (pswd.length());
        cout<<"pass="<<new_pswd<<endl;
    }
    return 0;
}

14:47:19[tigra@tigra3]~/bin/tmp> g++ ./sim_pwd.cpp
sim_pwd.cpp: In function `int main()':
sim_pwd.cpp:59: error: invalid initialization of reference of type '
   std::string&' from expression of type 'QString'
sim_pwd.cpp:9: error: in passing argument 1 of `std::string
   getToken(std::string&, char, bool)'

Но ведь оба куска из исходников! Чем-то ведь они компилили!!
Подскажите, пожалуйста, как?

boatman
() автор топика
Ответ на: комментарий от boatman

Решил я в общем проблему. Надоело разбираться в исходниках и
заниматься насилием с компилятором отлавливая хидеры и классы Qt. 
Решил написать свой аналог по функционалу того кода.

Еслу кому нужна ломалка паролей для Sim v 0.9.3 - милости прошу.
Выковыриваем файл ~/.kde/share/apps/sim/ICQ.XXX.1/clients.conf строки с Password="$xxx$xxx$xxx" для icq, jabber и прочих аккаунтов, и вбиваем в скрипт.

19:45:54[tigra@tigra3]~/bin/sim_pwd> cat ./sim2_pwd.pl
#!/usr/bin/perl -w
## Sim's v 0.9.3 password crack
## 2005-08-08
## v.0.1

use strict;
use Unicode::String;

my $INIT_PASS = '$431c$4376$4312$4374$430e$4349$4323$4348$4322';

my $INIT_KEY  = 0x4345;

#################################

my $tmp_key    = $INIT_KEY;
my $crypt_pass = $INIT_PASS;

print "\nCRYPT_PASS=".$crypt_pass."\n\n";
$crypt_pass =~ s/\$//;

my $arg;
my @args = split('\$',$crypt_pass);
my $i=0;

my $hex_pass = "";
my $hex_value;
my $u2 = Unicode::String->new();
my $open_pass  = Unicode::String->new();

foreach $arg(@args)
{
    $i++;
    $arg = "0x".$arg;
    print "$i:(key=".$tmp_key.")^[simbol=".hex($arg)."]";
    my $a = $tmp_key;
    my $b = hex($arg);
    my $c = $a ^ $b;
    $u2->chr("$c"); print " is '".$u2->utf8."'";
    print ", decimal unicode 0x$c\n";
    $open_pass->append($u2);
    $tmp_key   = hex($arg);
}

print "\nOPEN PASS: ".$open_pass->utf8."\n";
19:46:01[tigra@tigra3]~/bin/sim_pwd> ./sim2_pwd.pl

CRYPT_PASS=$431c$4376$4312$4374$430e$4349$4323$4348$4322

1:(key=17221)^[simbol=17180] is 'Y', decimal unicode 0x89
2:(key=17180)^[simbol=17270] is 'j', decimal unicode 0x106
3:(key=17270)^[simbol=17170] is 'd', decimal unicode 0x100
4:(key=17170)^[simbol=17268] is 'f', decimal unicode 0x102
5:(key=17268)^[simbol=17166] is 'z', decimal unicode 0x122
6:(key=17166)^[simbol=17225] is 'G', decimal unicode 0x71
7:(key=17225)^[simbol=17187] is 'j', decimal unicode 0x106
8:(key=17187)^[simbol=17224] is 'k', decimal unicode 0x107
9:(key=17224)^[simbol=17186] is 'j', decimal unicode 0x106

OPEN PASS: YjdfzGjkj
19:46:15[tigra@tigra3]~/bin/sim_pwd>

P.S. Perl - рулез! Всем кто помогал - спасибо! =)

boatman
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.