Vai al contenuto

[C++] Problema con gli #include [ANCORA NON RISOLTO]


zeeb100

Messaggi raccomandati

Salve raga spero che mi possiate dare una mano

se in un file c++ ho

#include <mysql++.h>

compilo e esce questo errore:

error: mysql++.h: No such file or directory

Come devo settare le variabili d'ambiente per poter far leggere dalle parentesi angolari il file

<mysql++.h>

senza dover fare

"../ -path- /mysql++.h"

Queste sono le mie variabili d'ambiente avendo eseguito printenv:

MANPATH=/sw/share/man:/usr/share/man:/usr/local/share/man:/usr/X11/man:/sw/lib/perl5/5.8.8/man:/usr/X11R6/man

TERM_PROGRAM=Apple_Terminal

TERM=xterm-color

SHELL=/bin/bash

TMPDIR=/var/folders/Qq/Qqre4Z5sEp4EYlUU3L3JbE+++TI/-Tmp-/

PERL5LIB=/sw/lib/perl5:/sw/lib/perl5/darwin

Apple_PubSub_Socket_Render=/tmp/launch-rhxBva/Render

TERM_PROGRAM_VERSION=240

OLDPWD=/Users/marko

USER=marko

COMMAND_MODE=unix2003

SSH_AUTH_SOCK=/tmp/launch-HTUx7R/Listeners

__CF_USER_TEXT_ENCODING=0x1F5:0:4

PATH=/Users/marko/ImageMagick-6.4.6/include/ImageMagick:/Users/marko/ImageMagick-6.4.6/bin:/sw/bin:/sw/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/X11R6/bin

PWD=/Users/marko/Desktop/Tirocinio/Tokamak

LANG=it_IT.UTF-8

MAGICK_HOME=/Users/marko/ImageMagick-6.4.6

MAGICK_INCLUDE=/Users/marko/ImageMagick-6.4.6/include/ImageMagick

SHLVL=1

HOME=/Users/marko

DYLD_LIBRARY_PATH=/Users/marko/ImageMagick-6.4.6/lib

LOGNAME=marko

INFOPATH=/sw/share/info:/sw/info:/usr/share/info

DISPLAY=/tmp/launch-bUD74E/:0

INCLUDE=/Users/marko/ImageMagick-6.4.6/include/ImageMagick

SECURITYSESSIONID=912a00

_=/usr/bin/printenv

Grazie in anticipo per le risposte ;) !!!

Credo che il ciclo vitale dovrebbe essere del tutto rovesciato. Bisognerebbe iniziare morendo ...e fire il tutto con un bell' orgasmo

Link al commento
Condividi su altri siti

Dubito che le variabili d'ambianete del Terminale c'entrino qualcosa.

Riconosce il nome, quindi le parentesi le riconosce, semplicemente penso che non trova il file.

Di solito le angolari si usano per gli header di sistema, prova ad usare le virgolette doppie (").

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

che io sappia non si può fare...

a meno che (molto forse...) non vai a posizionare il file mysql++.h direttamente nella lib di C++, o meglio di g++ (o del compilatore che usi)...

però non ne sono per niente sicuro, ho sempre usato "../path/nome.h"

 MacBook Pro 2011 13" i5 2.4GHz 4GB 

I'm a mac user

Link al commento
Condividi su altri siti

scusa ma se devo utilizzare librerie openSource mica mi posso mettere a sostituire tutte le righead esempio

<gtk/gtk.h>

con

"../gtk/gtk.h"

a sua volta altri file richiamano altre libreire che a loro volta chiamano altre librerie .. mica posso sostituire il codice a tutti questi file ... ;)

Credo che il ciclo vitale dovrebbe essere del tutto rovesciato. Bisognerebbe iniziare morendo ...e fire il tutto con un bell' orgasmo

Link al commento
Condividi su altri siti

Quando usi le parentesi angolari il compilatore va acercare nella cartella di default di sistema (es. /usr/include), metre se usi le virgolette doppie cerca il file nella cartella corrente (di solito quella del progetto).

Se il file quindi è nella stessa cartella del progetto devi usare le virgolette.

Se poi la libreria fa uso di altri header stadard nel sistema, va bene che usi le algolari.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

non capisco cosa vuoi dire...

se devi usare librerie open ti serve solo il percorso della libreria da usare nei tuoi sorgenti.

faccio un esempio:

diciamo che voglio creare un'applicazione che sfrutta una libreria open che si trova in /Users/Io/Scrivania/lib/open.h

mi basta richiamarla nel mio sorgente main.cpp (o quello che ti pare) con il percorso assoluto

#include "/Users/Io/Scrivania/lib/open.h"

solitamente è bene copiare le librerie che vengono usate nel progetto nella stessa directory in modo da poter utilizzare il percorso relativo.

per quanto riguarda le dipendenze della libreria stessa tu non devi preoccupartene minimamente poichè sono settate con il percorso relativo, quindi sanno dove trovarsi autonomamente!

 MacBook Pro 2011 13" i5 2.4GHz 4GB 

I'm a mac user

Link al commento
Condividi su altri siti

Quando crei un programma devi prima creare un file chiamato "progetto" che conterrà i dati che serviranno al compilatore per compilare quel determinato tipo di progetto.

Se l'ide usato si basa su GCC quando clicchi su compila l'ide andrà a leggersi il file di progetto per creare il makefile che sarà utilizzato da gcc per compilare.

All'interno delle "variabili di progetto" ci sono cose come il codice target della macchina (i386/i686 in caso di windows oppure powerpc/intel/universal binary per mac), i percorsi del file header e i percorsi di eventuali librerie.

Per accedere a tutto questo ben di Dio usando xcode devi creare prima un nuovo progetto, selezionare dalla sidebar il progetto o il relativo target e premere nella toolbar il tasto info. Da lì devi andare nella scheda Build e devi cercare user header search path e other linker flags (saranno presenti entrambi solo se il progetto sarà tarato per codice c e derivati, quali l'objective c o il c++).

A discrezione dell'IDE, alcuni path possono essere mostrati o meno (quali lo /usr/lib sopra detto).

Quando si dichiara unl'inclusione con le parentesi angolari si dice al compilatore di andare a cercare il file all'interno delle directory predefinite (quelle date in pasto alle variabili del progetto).

Quando si dichiara un'inclusione con gli apici si dice al compilatore di andare a cercare il file nella directory corrente (tipicamente quella in cui stanno tutti i files del progetto".

Alcuni compilatori possono dare errore se si dichiara con le parentesi angolari un'inclusione che sta nella directory corrente, altri se ne sbattono altamente.

Usare l'header assoluto è sconsigliato in quanto se si prova a compilare i sorgenti da un'altra macchina o se si rilasciano i sorgenti del progetto chi lo ricompila deve andarsi a modificare le varie inclusioni e questo a seconda della licenza può essere negato o meno perché di fatto è una modifica al file sorgente.

Le librerie rilasciate come tali quali libmysql++ o gtk andrebbero sempre incluse con le parentesi angolari perché così basta una modifica al file di progetto e magicamente tutto viene compilato correttamente qualora sia ncessario compilare da un'altra macchina.

Dio@paradiso:~$ gcc -o Terra World.cpp

Link al commento
Condividi su altri siti

Io vorrei fare proprio quello che dici tu

"Le librerie rilasciate come tali quali libmysql++ o gtk andrebbero sempre incluse con le parentesi angolari perché così basta una modifica al file di progetto e magicamente tutto viene compilato correttamente qualora sia ncessario compilare da un'altra macchina."

... ok ... ma guarda questo:

provag.h----

#include "/usr/local/include/mysql++/mysql++.h"

#include <stdio.h>

int main( int argc, char *argv[] ){

printf("hello\n");

return 0;

}

riga di comando

g++ -o xxx provag.cpp /usr/local/lib/libmysqlpp.dylib

ecco cosa mi restituisce il compilatore:

In file included from /usr/local/include/mysql++/connection.h:38,

from /usr/local/include/mysql++/mysql++.h:56,

from provag.cpp:2:

/usr/local/include/mysql++/common.h:124:28: error: mysql_version.h: No such file or directory

/usr/local/include/mysql++/common.h:182:20: error: mysql.h: No such file or directory

/usr/local/include/mysql++/type_info.h:83: error: expected ‘,’ or ‘...’ before ‘bt’

/usr/local/include/mysql++/type_info.h:84: error: ISO C++ forbids declaration of ‘enum_field_types’ with no type

/usr/local/include/mysql++/type_info.h:98: error: ‘enum_field_types’ does not name a type

/usr/local/include/mysql++/type_info.h: In constructor ‘mysqlpp::mysql_ti_sql_type_info::mysql_ti_sql_type_info()’:

/usr/local/include/mysql++/type_info.h:71: error: class ‘mysqlpp::mysql_ti_sql_type_info’ does not have any field named ‘base_type_’

/usr/local/include/mysql++/type_info.h:75: error: ‘FIELD_TYPE_NULL’ was not declared in this scope

/usr/local/include/mysql++/type_info.h: In constructor ‘mysqlpp::mysql_ti_sql_type_info::mysql_ti_sql_type_info(const char*, const std::type_info&, int)’:

/usr/local/include/mysql++/type_info.h:87: error: class ‘mysqlpp::mysql_ti_sql_type_info’ does not have any field named ‘base_type_’

/usr/local/include/mysql++/type_info.h:87: error: ‘bt’ was not declared in this scope

/usr/local/include/mysql++/type_info.h:88: error: ‘flags’ was not declared in this scope

/usr/local/include/mysql++/type_info.h: At global scope:

/usr/local/include/mysql++/type_info.h:168: error: expected `)' before ‘t’

/usr/local/include/mysql++/type_info.h:270: error: ‘enum_field_types’ does not name a type

/usr/local/include/mysql++/type_info.h:304: error: ‘enum_field_types’ has not been declared

/usr/local/include/mysql++/type_info.h: In member function ‘const mysqlpp::mysql_type_info mysqlpp::mysql_type_info::base_type() const’:

/usr/local/include/mysql++/type_info.h:230: error: ‘const class mysqlpp::mysql_ti_sql_type_info’ has no member named ‘base_type_’

/usr/local/include/mysql++/sql_buffer.h: At global scope:

/usr/local/include/mysql++/sql_buffer.h:71: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/sql_buffer.h:76: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/sql_buffer.h: In member function ‘bool mysqlpp::SQLBuffer::is_string()’:

/usr/local/include/mysql++/sql_buffer.h:95: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/field.h: At global scope:

/usr/local/include/mysql++/field.h:58: error: expected ‘,’ or ‘...’ before ‘*’ token

/usr/local/include/mysql++/field.h:58: error: ISO C++ forbids declaration of ‘MYSQL_FIELD’ with no type

/usr/local/include/mysql++/field.h: In constructor ‘mysqlpp::Field::Field(int)’:

/usr/local/include/mysql++/field.h:59: error: ‘pf’ was not declared in this scope

/usr/local/include/mysql++/field.h:64: error: ‘UNSIGNED_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h:65: error: ‘NOT_NULL_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::auto_increment() const’:

/usr/local/include/mysql++/field.h:85: error: ‘AUTO_INCREMENT_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::binary_type() const’:

/usr/local/include/mysql++/field.h:88: error: ‘BINARY_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::blob_type() const’:

/usr/local/include/mysql++/field.h:91: error: ‘BLOB_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::enumeration() const’:

/usr/local/include/mysql++/field.h:97: error: ‘ENUM_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::multiple_key() const’:

/usr/local/include/mysql++/field.h:110: error: ‘MULTIPLE_KEY_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::primary_key() const’:

/usr/local/include/mysql++/field.h:121: error: ‘PRI_KEY_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::set_type() const’:

/usr/local/include/mysql++/field.h:124: error: ‘SET_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::timestamp() const’:

/usr/local/include/mysql++/field.h:130: error: ‘TIMESTAMP_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::unique_key() const’:

/usr/local/include/mysql++/field.h:136: error: ‘UNIQUE_KEY_FLAG’ was not declared in this scope

/usr/local/include/mysql++/field.h: In member function ‘bool mysqlpp::Field::zerofill() const’:

/usr/local/include/mysql++/field.h:139: error: ‘ZEROFILL_FLAG’ was not declared in this scope

/usr/local/include/mysql++/mystring.h: At global scope:

/usr/local/include/mysql++/mystring.h:197: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/mystring.h:211: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/mystring.h:226: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/mystring.h:243: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/mystring.h:256: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/mystring.h:270: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/mystring.h: In member function ‘mysqlpp::mysql_type_info mysqlpp::String::type() const’:

/usr/local/include/mysql++/mystring.h:447: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/mystring.h: In member function ‘mysqlpp::String& mysqlpp::String::operator=(const std::string&)’:

/usr/local/include/mysql++/mystring.h:455: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/mystring.h: In member function ‘mysqlpp::String& mysqlpp::String::operator=(const char*)’:

/usr/local/include/mysql++/mystring.h:468: error: ‘string_type’ is not a member of ‘mysqlpp::mysql_type_info’

/usr/local/include/mysql++/row.h: At global scope:

/usr/local/include/mysql++/row.h:137: error: expected `)' before ‘row’

/usr/local/include/mysql++/result.h:168: error: expected `)' before ‘*’ token

/usr/local/include/mysql++/result.h:231: error: expected `)' before ‘*’ token

/usr/local/include/mysql++/result.h:281: error: ‘MYSQL_RES’ was not declared in this scope

/usr/local/include/mysql++/result.h:281: error: template argument 1 is invalid

/usr/local/include/mysql++/result.h:281: error: explicit specialization of non-template ‘<type error>’

/usr/local/include/mysql++/result.h:308: error: expected `)' before ‘*’ token

/usr/local/include/mysql++/result.h:354: error: ‘MYSQL_ROW’ does not name a type

/usr/local/include/mysql++/result.h:385: error: expected type-specifier before ‘MYSQL_RES’

/usr/local/include/mysql++/result.h:401: error: ‘MYSQL_RES’ was not declared in this scope

/usr/local/include/mysql++/result.h:401: error: template argument 1 is invalid

/usr/local/include/mysql++/result.h:401: error: template argument 2 is invalid

/usr/local/include/mysql++/query.h: In member function ‘void mysqlpp::Query::storein_sequence(Sequence&, const mysqlpp::SQLTypeAdapter&)’:

/usr/local/include/mysql++/query.h:746: error: ‘MYSQL_ROW’ was not declared in this scope

/usr/local/include/mysql++/query.h:746: error: expected `;' before ‘d’

/usr/local/include/mysql++/query.h:747: error: ‘d’ was not declared in this scope

/usr/local/include/mysql++/query.h:749: error: ‘d’ was not declared in this scope

/usr/local/include/mysql++/query.h: In member function ‘void mysqlpp::Query::storein_set(Set&, const mysqlpp::SQLTypeAdapter&)’:

/usr/local/include/mysql++/query.h:803: error: ‘MYSQL_ROW’ was not declared in this scope

/usr/local/include/mysql++/query.h:803: error: expected `;' before ‘d’

/usr/local/include/mysql++/query.h:804: error: ‘d’ was not declared in this scope

/usr/local/include/mysql++/query.h:806: error: ‘d’ was not declared in this scope

Credo che il ciclo vitale dovrebbe essere del tutto rovesciato. Bisognerebbe iniziare morendo ...e fire il tutto con un bell' orgasmo

Link al commento
Condividi su altri siti

in realtà non è necessario utilizzare un IDE e quindi creare un progetto e così via, ma basta crearsi anche da solo il Makefile per semplificare la compilazione, è semplicissimo (ovviamente in proporzione alla complessità del progetto che si vuole creare!).

riga di comando

g++ -o xxx provag.cpp /usr/local/lib/libmysqlpp.dylib

comunque non capisco cosa sono quelle "xxx" e la stringa finale, per compilare dovrebbe bastarti un

g++ -o provag.cpp prova

poichè gli include li hai già messi all'interno del sorgente...

 MacBook Pro 2011 13" i5 2.4GHz 4GB 

I'm a mac user

Link al commento
Condividi su altri siti

Scusa ma forse sbaglio qualcosa ... continua a dare sempre quegli errori

non riesce proprio a trovare i file dice sempre

No such file or directory come sopra citato

ps: dopo l'istruzione -o xxx il file generato non sarà più a.out ma xxx l'avevo messo come esempio :bacino:

Credo che il ciclo vitale dovrebbe essere del tutto rovesciato. Bisognerebbe iniziare morendo ...e fire il tutto con un bell' orgasmo

Link al commento
Condividi su altri siti

ho provato a scaricare la libreria in questione (dovrebbe essere mysql++-3.0.8) per fare qualche prova ma in qualsiasi modo ottengo sempre errori per mancanza di dipendenze e controllando nelle cartelle dei sorgenti ho notato che alcuni file non sono proprio presenti, pertanto ho concluso che non si tratta di libreri pronte all'uso, bensì solo di sorgenti da compilare per poter essere utilizzati.

ho fatto però una prova con una libreria distribuita come tale, Crypto++, e con la stessa procedura non ottengo alcun errore perchè si tratta di una libreria, appunto.

 MacBook Pro 2011 13" i5 2.4GHz 4GB 

I'm a mac user

Link al commento
Condividi su altri siti

Scusa la mia ignoranza morale della favola ... ???? Cosa mi consigliate di fare ?

Credo che il ciclo vitale dovrebbe essere del tutto rovesciato. Bisognerebbe iniziare morendo ...e fire il tutto con un bell' orgasmo

Link al commento
Condividi su altri siti

la questione è che non c'è morale...

è solo che, probabilmente, stai cercando di usare dei semplici sorgenti come se fossero librerie pronte all'uso.

la soluzione è trovare le librerie di ciò che cerchi già pronte per essere richiamate e utilizzate, oppure trovare il modo di prepararle seguendo le indicazioni degli sviluppatori.

inutile dire che la prima è la strada più semplice...

 MacBook Pro 2011 13" i5 2.4GHz 4GB 

I'm a mac user

Link al commento
Condividi su altri siti

Grazie proverò:ok::dance::libro:... cmq per gli altri se aveesero una minima idea please scrivete :ciao:

Credo che il ciclo vitale dovrebbe essere del tutto rovesciato. Bisognerebbe iniziare morendo ...e fire il tutto con un bell' orgasmo

Link al commento
Condividi su altri siti

Se vuoi includere dei sorgenti non presenti nel path quando compili devi usare l'opzione -I per includere un file sorgente oppure -L per includere una libreria.

Trovi comunque tutto nel manuale di gcc, e' un po' lungo ma basta leggere solo quello che ti interessa :)

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...