Biblioteca CAENHVWRAPPER.H com problema no ifdef UNIX [RESOLVIDO]

1. Biblioteca CAENHVWRAPPER.H com problema no ifdef UNIX [RESOLVIDO]

João Victor
malvitor

(usa Ubuntu)

Enviado em 21/10/2015 - 22:04h

Galera, preciso de uma ajuda quanto a um erro que está ocorrendo quando tento compilar meu programa no qtcreator dá um erro de /usr/include/CAENHVWrapper.h:28:21: fatal error: windows.h: No such file or directory
#include <windows.h>

Creio que seja por causa da biblioteca não conseguir identificar corretamente qual o SO
#ifdef UNIX                           // Rel. 2.0 - Linux
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

#define CAENHVLIB_API

extern void Sleep(unsigned int x);

#else // UNIX

#include <windows.h>

#ifdef CAENHVLIB
#define CAENHVLIB_API __declspec(dllexport)
#else
#define CAENHVLIB_API
#endif

#endif // UNIX


Se alguem poder ajudar agradeço muito.
PS. A CAENHVWRAPPER.H é uma biblioteca propria da CAEN desenvolvida para seus produtos no meu caso uma Fonte de Alta tensão modelo SY4527.


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/10/2015 - 02:47h

malvitor escreveu:

Valeu Thihup pela ajuda. O problema é que não posso alterar essa biblioteca, ela é fornecida pelo fabricante do mainframe e será instalada tambem em outras maquinas que não terei acesso.


Se a biblioteca está usando a macro errada -- a certa seria mesmo unix, não UNIX --, ou você a troca pelo certa (você tem o fonte, por que não poderia mexer?) ou tenta definir um valor para a macro por fora do código, tentando. Uma possibilidade, que pode funcionar ou não, dependendo de como estejam os Makefiles, é definir a variável de ambiente CFLAGS com o valor “-DUNIX=1”.

PS: Teria alguma de desinstalar essa biblioteca, gostaria de reinstala-la do zero pois ocorreu um durante a instalação. Já tentei o make unstall no diretorio onde tem os arquios para a instalação dela mas quando tento aparece make: *** Sem regra para processar o alvo `uninstall'. Pare..


Se a biblioteca se instalar num diretório próprio, deve bastar apagá-lo (e eventualmente limpar alguma sujeira que fique no ld.so.cache). Outra possibilidade é você ver quais comandos um “make install” executa (talvez usando “make -n install”) e executar os correspondentes comandos para desfazer o que ele fizer.

3. Re: Biblioteca CAENHVWRAPPER.H com problema no ifdef UNIX

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 21/10/2015 - 22:17h

Vou apenas mostrar com comentários onde está seu erro:


#ifdef UNIX // Se for UNIX inclua essas bibliotecas
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

#define CAENHVLIB_API //Defina isso

extern void Sleep(unsigned int x); // E essa função

#else // Caso seja um OS diferente de UNIX

#include <windows.h>

#ifdef CAENHVLIB
#define CAENHVLIB_API __declspec(dllexport)
#else
#define CAENHVLIB_API
#endif

#endif // Termina o if


Vou sujerir um método para você:


#ifdef __unix__
//Se for Unix faça as coisas do Unix
#elif _WIN32
// Se for Windows faça as coisas do Windows
#else
// Caso não for unix nem windows gera um erro de compilação
#error "Sistema Nao Suportado"
#endif


Só para ajudar, algumas macros de outros sistemas:


__linux__ Definido no Linux
__sun Definido no Solaris
__FreeBSD__ Definido no FreeBSD
__NetBSD__ Definido no NetBSD
__OpenBSD__ Definido no OpenBSD
__APPLE__ Definido no Mac OS X
__hpux Definido no HP-UX
__osf__ Definido no Tru64 UNIX (conhecido 'formalmente' por DEC OSF1)
__sgi Definido no Irix
_AIX Definido no AIX


Um site mais completo:

http://www.boost.org/doc/libs/1_59_0/libs/predef/doc/html/predef/reference/boost_os_operating_system... 


Espero ter ajudado

Se ajudei, marque o tópico como Resolvido e clique em melhor resposta!

[]'s

T+

--

body@human: $ sudo su
brain@human: # apt-get purge -y windows* && echo "Windows removed successfully"




4. Re: Biblioteca CAENHVWRAPPER.H com problema no ifdef UNIX

João Victor
malvitor

(usa Ubuntu)

Enviado em 21/10/2015 - 23:40h

Valeu Thihup pela ajuda. O problema é que não posso alterar essa biblioteca, ela é fornecida pelo fabricante do mainframe e será instalada tambem em outras maquinas que não terei acesso.

PS: Teria alguma de desinstalar essa biblioteca, gostaria de reinstala-la do zero pois ocorreu um durante a instalação. Já tentei o make unstall no diretorio onde tem os arquios para a instalação dela mas quando tento aparece make: *** Sem regra para processar o alvo `uninstall'. Pare..


5. Re: Biblioteca CAENHVWRAPPER.H com problema no ifdef UNIX [RESOLVIDO]

João Victor
malvitor

(usa Ubuntu)

Enviado em 22/10/2015 - 13:29h

paulo1205 escreveu:

malvitor escreveu:

Valeu Thihup pela ajuda. O problema é que não posso alterar essa biblioteca, ela é fornecida pelo fabricante do mainframe e será instalada tambem em outras maquinas que não terei acesso.


Se a biblioteca está usando a macro errada -- a certa seria mesmo unix, não UNIX --, ou você a troca pelo certa (você tem o fonte, por que não poderia mexer?) ou tenta definir um valor para a macro por fora do código, tentando. Uma possibilidade, que pode funcionar ou não, dependendo de como estejam os Makefiles, é definir a variável de ambiente CFLAGS com o valor “-DUNIX=1”.

PS: Teria alguma de desinstalar essa biblioteca, gostaria de reinstala-la do zero pois ocorreu um durante a instalação. Já tentei o make unstall no diretorio onde tem os arquios para a instalação dela mas quando tento aparece make: *** Sem regra para processar o alvo `uninstall'. Pare..


Se a biblioteca se instalar num diretório próprio, deve bastar apagá-lo (e eventualmente limpar alguma sujeira que fique no ld.so.cache). Outra possibilidade é você ver quais comandos um “make install” executa (talvez usando “make -n install”) e executar os correspondentes comandos para desfazer o que ele fizer.


paulo1205 fiz o que voce recomendou em relação a alterar o makefile pra mudar o DUNIX para DUNIX=1 e quando utilizei o comando make -n install o resultado foi:

install lib/libcaenhvwrapper.so.5.77 /usr/lib
ln -sf /usr/lib/libcaenhvwrapper.so.5.77 /usr/lib/libcaenhvwrapper.so
cp ./include/CAENHVWrapper.h /usr/include/CAENHVWrapper.h
ldconfig
make all
rm -f HVWrapperDemo/MainWrapp.o HVWrapperDemo/CmdWrapp.o HVWrapperDemo/console.o


e quando fiz o make install ocorreu um erro ja havia acontecido anteriormente e acredito que seja a cuasa dos problemas

install lib/libcaenhvwrapper.so.5.77 /usr/lib
ln -sf /usr/lib/libcaenhvwrapper.so.5.77 /usr/lib/libcaenhvwrapper.so
cp ./include/CAENHVWrapper.h /usr/include/CAENHVWrapper.h
ldconfig
make all
make[1]: Entrando no diretório `/home/joao/Downloads/Linux'
gcc -DUNIX=1 -DLINUX -o HVWrapperDemo/HVWrappdemo HVWrapperDemo/MainWrapp.o HVWrapperDemo/CmdWrapp.o HVWrapperDemo/console.o\
-L /usr/lib -lcaenhvwrapper -lncurses -lpthread -ldl -lm
/usr/bin/ld: ignorando /usr/lib/libcaenhvwrapper.so incompatível ao procurar por -lcaenhvwrapper
/usr/bin/ld: ignorando /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libcaenhvwrapper.so incompatível ao procurar por -lcaenhvwrapper
/usr/bin/ld: ignorando /usr/lib/../lib/libcaenhvwrapper.so incompatível ao procurar por -lcaenhvwrapper
/usr/bin/ld: ignorando /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../libcaenhvwrapper.so incompatível ao procurar por -lcaenhvwrapper
/usr/bin/ld: ignorando //usr/lib/libcaenhvwrapper.so incompatível ao procurar por -lcaenhvwrapper
/usr/bin/ld: não foi possível encontrar -lcaenhvwrapper
collect2: error: ld returned 1 exit status
make[1]: ** [HVWrapperDemo/HVWrappdemo] Erro 1
make[1]: Saindo do diretório `/home/joao/Downloads/Linux'
make: ** [install] Erro 2

Pelo meu pouco conhecimento em linux acho que esta ocorrendo algum erro entre o link da libcaenhvwrapper.so.5.77 com
libcaenhvwrapper.so que não deixa reconhecer o lcaenhvwrapper, ou não. Bem obrigado pela ajuda dos dois ai de qualquer forma, vou esperar mais um pouco pra ver aparece alguma outra luz.
PS. Tem como rodar o makefile_64 ao invés do makefile normal ou isto já é feito automaticamente, por que pelo que eu vi ele copia a libcaenhvwrapper.so.5.77 da pasta /lib sendo que tem outra na pasta /lib/x64.
PS2. Escrevi isso tudo pra depois perceber a mer... que eu fiz. Era só renomear os makefiles. Porem o problema do ifdef UNIX continua mesmo alterando pra DUNIX=1 acho que vou ter que alterar na mão grande mesmo.
PS3. Vou colocar umas orelhas de burro no meu avatar.


6. Re: Biblioteca CAENHVWRAPPER.H com problema no ifdef UNIX [RESOLVIDO]

João Victor
malvitor

(usa Ubuntu)

Enviado em 22/10/2015 - 13:37h


paulo1205 fiz o que você disse e alterei .h trocando de UNIX pra unix na mão grande mesmo, e funcionou, vou passar essa orientação pro meu orientador na hora que ele for implementar o projeto. Muito obrigado e perdoem minha burrice.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts