Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

EFerneda

Rotinas em C++ dentro de programas C

Recommended Posts

Sou novo no forum e também não conheço NADA de C++, mas estou precisando chamar uma rotina que está em C++ a partir de um programa em C.

Estou usando o Visual Studio 2008.

Alguém poderia me dar uma dica se isso é possível e, se for possível, como fazer ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for somente chamar o *.exe é facil, ql sistema operacional?

agora se qser chamar as linhas de código, ai já acho meio complicado, pois dependo do comando em C++, o C n vai reconhecer.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for somente chamar o *.exe é facil, ql sistema operacional?

agora se qser chamar as linhas de código, ai já acho meio complicado, pois dependo do comando em C++, o C n vai reconhecer.

 

[]s

 

 

Tudo bem, minha dúvida é se dá para compilar o programa em C,e a rotina em C++ separadamente e depois linkeditar os dois .o gerando um único executável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha EU acho que isso não é possível, vamos ver se alguem tem uma opinião diferente.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa pergunta eu achei bem interessante, então fui fazer o teste criando os seguintes arquivos:

 

Lib.hpp:

#ifndef _LIB_HPP
#define _LIB_HPP

void soma(int, int);

#endif /* _LIB_HPP */

Lib.cpp:

#include <cstdio>
#include <cstdlib>
#include "Lib.hpp"

void soma(int a, int B)
{
    printf("Resultado: %d", a+B);
}

Principal.c:

#include <stdlib.h>
#include <stdio.h>

#include "Lib.hpp"

int main(void)
{

    printf("Teste\n");

    soma(2,3);

    return 0;

}

Compilei a Lib.cpp:

g++ -o Lib.o -static -c Lib.cpp

Tentei linkar o binário:

gcc -o Principal Principal.c Lib.o

Mas foi sem sucesso. O compilador GCC não conseguiu encontrar os símbolos, por causa da assinatura das linguagens:

/var/tmp//cc9xI6Zk.o(.text+0x2d): In function `main':
: undefined reference to `soma'
Lib.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'

Pesquisei sobre algum parâmetro que pudesse passar e compilar, mas não achei.

 

Se alguém souber uma solução pra isso, eu também teria curiosidade em saber se é possível ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não terminei o teste mas está parecendo que vai funcionar.

 

Já dizia Garfield "Se não pode vencê-los, confunda-os".

 

Salvei meu programa.c como programa.cpp e compilei a criança.

Alguns pequenos ajustes (um include aqui, uma conversão em uma passagem de parâmetros ali ...) e compilou OK como um programa C++.

Agora dá para juntar com a rotima em c++ !!!!!!!

Quando acabar o teste, aviso o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

calma ai, oq você pediu foi:

rotina que está em C++ a partir de um programa em C.

isso eu acho que não é possivel, agora o contrário até dá.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O programa está em C ANSI. A rotina em C++.

Se o C++ é um "superset" do C, então eu posso compilar meu programa em C como se fosse um programa C++ e chamar rotinas C++ !!!

Tô errado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O programa está em C ANSI. A rotina em C++.

Se o C++ é um "superset" do C, então eu posso compilar meu programa em C como se fosse um programa C++ e chamar rotinas C++ !!!

Tô errado ?

 

 

A partir do momento em que se usa um compilador de C++, mesmo que o código seja todo feito de sintaxe e semântica válidas para o C, o programa é, em todos os aspectos, feito em C++.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.