Имеется проект (С++) из нескольких фаилов + main.cpp. Все обьектные файлы (кроме main.o) я собрал в одну библиотеку путем
ar rcs libmoj.a *.o
Теперь я делаю что то в роде
gcc -L/path/to/lib/ -lmoj main.cpp
а он ругается про undefined reference'ы, хотя когда я пытаюсь построить программу целеком, никаких проблем нет.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
string s = "this is a sample useless string";
string word;
(istringstream)(istringstream (s.substr(0,2))) >>word;
return 0;
}
$ gcc --version
gcc (GCC) 3.3.2 (Mandrake Linux 10.0 3.3.2-6mdk)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ gcc -c zz.cpp
/usr/include/c++/3.3.2/bits/ios_base.h: In copy constructor `std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)':
/usr/include/c++/3.3.2/bits/ios_base.h:668: error: `std::ios_base::ios_base(const std::ios_base&)' is private
zz.cpp:9: error: within this context
/usr/include/c++/3.3.2/streambuf: In copy constructor `std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::basic_stringbuf(const std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >&)':
/usr/include/c++/3.3.2/streambuf:922: error: `std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]' is private
zz.cpp:9: error: within this context
zz.cpp: In function `int main(int, char**)':
zz.cpp:9: error: no match for 'operator>>' in 'istringstream((&std::basic_string<_CharT, _Traits, _Alloc>::substr(typename _Alloc::size_type, typename _Alloc::size_type) const [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](0, 2)), (std::_Ios_Openmode)8) >> word'
/usr/include/c++/3.3.2/bits
Kто скажет почему эта дрянь не компилируется, и чем принципиально отличается комбинация строк 10 и 11 от строки 13?
1#include <iostream>
2#include <cstdlib>
3#include <strstream>
4#include <string>
5using namespace std;
6int main(int argc, char *argv[])
7{
8 char s[]="this is a sample useless string";
9 char word[120];
10 istrstream is (s,5);
11 is>>word;//works till now ,
12 //but the following does not
13 istrstream (s+1,5)>>word;
14 //-do something with word
15 istrstream (s+2,5)>>word;
16 //-do something with word
17 istrstream (s+5,5)>>word;
18 //-do something with word
19 return 0;
22}
compiling zz.cpp (g++)
*compiling -fPIC (g++)
zz.cpp: In function `int main(int, char**)':
zz.cpp:13: error: no match for 'operator>>' in 'istrstream(((&s) + 1), 5) >> word'
30*/usr/include/c++/3.3.2/bits/istream.tcc:86: error: candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>&(*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_ios<_CharT, _Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
..........................
Я пытаюсь скомпилировать программу написанную на gcc2.XX, используя gcc3. В следующей строке:
template<class T = BTL_REAL, class Alloc = alloc>
class matrix
{.............};
компайлер жалуется на то что тип alloc ему неизвестен. В STL тип alloc прописывается на каждом шагу в качестве дефолтивного типа, значит надо исползовать какой-то namespace, кроме std, а какой не знаю.
Две машины в сети: одна redhat7.3, к ней подключен принтер (он исправно работает). Вторая::: mandrake10.0. Во второй я добовляю Remote LPD printer, прописываыу hostname и посылаыу пробный лист на печать. Все работает нормально, джоб на принтере успешно заканчивается без жалоб, НО.... сам принтер не реагирует и ни чего не печатает,хотя с родного компа он,как я уже сказал, работает.
Подсобите советом.
ПС - я пробовал отменять фаервол - не помогло
$ sudo cat /etc/cups/printers.conf
# Printer configuration file for CUPS v1.1.20
# Written by cupsd on Sun 02 May 2004 10:03:11 AM GDT
<Printer oki11>
Info
Location hostname
DeviceURI lpd://hostname:515/lp
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
я пытаюсь установить самба принтер на новеньком Мандрэйке (10.0, official).
Почему-то ничего не печатается, а cups administration tool ругается каким-то
NT_STATUS_UNSUCCESSFUL
установил mandrake10.0 CE с kdevelop3, теперь не могу собрать простейший проект в C++, который работал в kdevelop2.
Я сделал: сделал новый проект C++ и добавил к нему нужные фаилы.
Все фаилы компилируются, но при build'е, выдаются кучи ошибок undefined reference.
Дерево в automake manager выглядит так:
Header in noinst
test1 (Program in bin)
|-triangle.h
|-triangle.cpp
|-test1.cpp
-------------------------
HELP
В перле это так просто: нужно посылать команды в какую-то программы и читать её output? Пишешь sebe open2(\*R, \*W, $command), и поехали.
А вот как это в ц++ сделать?, желательно при помощи stream`ов.
Как я понимаю, sockets это не совсем то, так как и сервер и клиент должен быть написан мною, а у меня задача иная - общатся с чужой (и закрытой) CLI программой.
Может ли кто-нибудь поделится кусочком кода или ссылкой на готовый ресурс на сети?
Помогите, люди добрые: не могу поимать fstat. Ни как не могу найти ошибку:
[me]$ cat fakestat.c
/* fakestat.c*/
#include <sys/stat.h>
#define BUFFERLEN 256
int fstat (int fd, struct stat *statbuf);
int fstat (int fd, struct stat *statbuf){
return 10;
}
[me]$ cat stattest.c
#include <fcntl.h>
/*stattest.c*/
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <dlfcn.h>
int main(int argc, char *argv[])
{
char fileName[120];
struct stat statbuf, realstatbuf;
char timeBuf[50];
int a, statRet;
strcpy(fileName, "/etc/passwd");
a=open (fileName,O_RDONLY );
if (statRet=fstat(a, &statbuf)){
printf("could not fstat %s: %s\n", fileName, strerror(errno));
}
printf ("stat returned %d\n",statRet);
printf("passwd was accessed on %s\n",ctime(&statbuf.st_atime));
return 0;
}
[me]$ cat Makefile
#Makefile
CC = gcc
all: lib testprog test
lib: fakestat.c
${CC} -nostartfiles -shared -fPIC -Wl,-soname,libfakestat.so.1 -o libfakestat.so.1 fakestat.c -ldl -lm
testprog: stattest.c
${CC} -o stattest stattest.c
test: lib testprog
@echo "Running the test program with no faked stat specified"
@LD_PRELOAD=./libfakestat.so.1 ./stattest
@echo
@echo "Running the test program with absolute date 2003-01-01 10:00:05 specified"
@LD_PRELOAD=./libfakestat.so.1 FAKETIME="2003-01-01 10:00:05" ./stattest[me]$ make
gcc -nostartfiles -shared -fPIC -Wl,-soname,libfakestat.so.1 -o libfakestat.so.1 fakestat.c -ldl -lm
gcc -o stattest stattest.c
Running the test program with no faked stat specified
stat returned 0
passwd was accessed on Wed Feb 25 01:34:21 2004
Running the test program with absolute date 2003-01-01 10:00:05 specified
stat returned 0
passwd was accessed on Wed Feb 25 01:34:21 2004
как сделать так, что-бы работала комманда:
#smbclient -L compname -U printer
без надобности указывать IP при помощи опции -I? (smbclient -I AAA.AAA.AAA.AAA -L compname -U printer )
Я получаю бесплатный интернет от моей работы. Недавно начальство , из экономии, решило закрыть порты от IRC (667, кажется). В принципе можно соедининться через открытые прокси, потдерживаюсщие connect, но сервера irc.freenode.net (а именно эта сеть меня интересует) блокируют открытые прокси.
Подскажите, где можно получить shell account (можно платный), который даст возможность irc-чата, не используя открытые прокси.
Помогите пожалуйста, второй день бьюсь и ни чего не получается.
Вот такуй сетуп: 3 компа в большой сети на работе. Один win98, на котором стоит принтер, один RH 7.3 и один Mandrake 9.2. Печать с RH работает как часики, а вот с Mdk - ёк.
В Mdk я конфигурировал принтер через мандракевский гуй. Он нашел кучу принтеров по всей нашей не маленькой конторе, но нужный принтер - не нашел. Пришлось настраивать в ручную.
Получаю ошибку:
"Unable to connect to SAMBA host, will retry in 60 seconds...ERROR: cli_connect() failed..."
Для проверки сделал:
smbclient -L compname -U printer
added interface ip=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
error connecting to YYYYYYYYYYYYYYYY (No route to host)
Error connecting to ZZZZZZZZZZZZZZZZ (No route to host)
Connection to compname failed
(причем ни один из указанных IP не является IP нужного компютера)
Пишу программу, которая по ошибке жрет всю память. После нескольких таких запусков, врубается kswapd и система начинает мигать лампочкой харда и перестает реагировать. В top'е успел заметить что от RAMa (всего 256 мега) осталось процентов 30, а от swap-а (512 Мега на одном диске и целый старый диск на 800 мега) осталось 0 килобаитов). Подскажите, пожалуйста, чего делать.
[Тут, может год назад, пробегал похожий вопрос, так что кто знает, помогите, пожалуйста.]
Имеем треугольник с вершинами A[0;0;0], B[Xb;0;0], C[Xc,Yx,0]. Треугольник повернули в округ оси [i;j;k] ((i^2+j^2+k^2)==1) на alpha градусов (или радианов) и теперешние его координаты: A'[0;0;0], B'[Xb'Yb'Zb'], C[Xc'Yc'Zc']. Как из этой информации можно восстановить ось вращения ([i,j,k]) и угол alpha?
Заранее спасибо.
P.S Пожалуйста не гоните меня учить матчасть: формального образования по математике у меня практически нету. Хотя это было-бы и полезно, но неделю на вникание в алгебру, только для решения этой задачи, мне немножко жалко.
НО... печатать их надо в градусах.
По идее, можно сделать так:
for (vector<float>::const_iterator i=radians.begin();i!=radians.end();++i){
cout<<(*i)*PI/180.0<<' ';
}
Как видите, это очень громоздко и неудобно, поэтому очень хочется добится того-же результата используя copy, вот только не знаю как.
Помогите, пожалуйста.