Автор Тема: Помогите откомпилировать файл  (Прочитано 2871 раз)

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Создал тему по поводу проброса IPTV через альтовский сервак в локалку http://forum.altlinux.org/index.php?topic=2975.0

В итоге есть файл:
#include <stdio.h>
#include <unistd.h>
#include <strings.h>
#include <arpa/inet.h>
#include <netinet/igmp.h>
#include <linux/mroute.h>

int main()
{
        int igmp_socket;
        int value;
        struct vifctl vc;
        struct ip_mreq mreq;
        struct mfcctl mc;
        in_addr_t local_addr = inet_addr("<адрес локального интерфейса, например 192.168.0.1>");
        in_addr_t remote_addr = inet_addr("<адрес внешнего интерфейса, например 87.240.12.34>");
        in_addr_t multicast = inet_addr("<мультикаст-группа, например 239.255.2.14>");
        in_addr_t origin_addr = inet_addr("<адрес источника тв-вещания, например 213.85.187.36>");

// Создаём igmp-сокет
        igmp_socket = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
// Инициализируем мультикаст-роутинг
        value = 1;
        setsockopt(igmp_socket, IPPROTO_IP, MRT_INIT, &value, sizeof(value));
// Создаем виртуальные мультикаст интерфейсы (vif)
        vc.vifc_vifi = 0;
        vc.vifc_flags = 0;
        vc.vifc_threshold = 1;
        vc.vifc_rate_limit = 0;
        vc.vifc_lcl_addr.s_addr = remote_addr;
        vc.vifc_rmt_addr.s_addr = 0;
        setsockopt(igmp_socket, IPPROTO_IP, MRT_ADD_VIF, &vc, sizeof(vc));
        vc.vifc_vifi = 1;
        vc.vifc_lcl_addr.s_addr = local_addr;
        setsockopt(igmp_socket, IPPROTO_IP, MRT_ADD_VIF, &vc, sizeof(vc));
// Подключаемся к igmp-группе на внешнем интерфейсе
        mreq.imr_multiaddr.s_addr = multicast;
        mreq.imr_interface.s_addr = remote_addr;
        setsockopt(igmp_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
// Добавляем запись в таблицу мультикаст-маршрутизации
        mc.mfcc_origin.s_addr = origin_addr;
        mc.mfcc_mcastgrp.s_addr = multicast;
        mc.mfcc_parent = 0;
        bzero(mc.mfcc_ttls, sizeof(mc.mfcc_ttls));
        mc.mfcc_ttls[1] = 1;
        setsockopt(igmp_socket, IPPROTO_IP, MRT_ADD_MFC, &mc, sizeof(mc));
// Смотрим телек
        printf("Press ENTER to exit\n");
        getchar();
// Вырубаем
        mreq.imr_multiaddr.s_addr = multicast;
        mreq.imr_interface.s_addr = remote_addr;
        setsockopt(igmp_socket, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
        setsockopt(igmp_socket, IPPROTO_IP, MRT_DONE, NULL, 0);
        close(igmp_socket);

        return 0;
}
Но при компиляции выдает ошибки не могу понять в чем проблема:
[root@localhost ~]# gcc iptv.c
In file included from /usr/include/linux/mroute.h:5,
                 from iptv.c:6:
/usr/include/linux/in.h:26: error: redeclaration of enumerator ‘IPPROTO_IP’
/usr/include/netinet/in.h:33: error: previous definition of ‘IPPROTO_IP’ was here
/usr/include/linux/in.h:27: error: redeclaration of enumerator ‘IPPROTO_ICMP’
/usr/include/netinet/in.h:37: error: previous definition of ‘IPPROTO_ICMP’ was here
/usr/include/linux/in.h:28: error: redeclaration of enumerator ‘IPPROTO_IGMP’
/usr/include/netinet/in.h:39: error: previous definition of ‘IPPROTO_IGMP’ was here
/usr/include/linux/in.h:29: error: redeclaration of enumerator ‘IPPROTO_IPIP’
/usr/include/netinet/in.h:41: error: previous definition of ‘IPPROTO_IPIP’ was here
/usr/include/linux/in.h:30: error: redeclaration of enumerator ‘IPPROTO_TCP’
/usr/include/netinet/in.h:43: error: previous definition of ‘IPPROTO_TCP’ was here
/usr/include/linux/in.h:31: error: redeclaration of enumerator ‘IPPROTO_EGP’
/usr/include/netinet/in.h:45: error: previous definition of ‘IPPROTO_EGP’ was here
/usr/include/linux/in.h:32: error: redeclaration of enumerator ‘IPPROTO_PUP’
/usr/include/netinet/in.h:47: error: previous definition of ‘IPPROTO_PUP’ was here
/usr/include/linux/in.h:33: error: redeclaration of enumerator ‘IPPROTO_UDP’
/usr/include/netinet/in.h:49: error: previous definition of ‘IPPROTO_UDP’ was here
/usr/include/linux/in.h:34: error: redeclaration of enumerator ‘IPPROTO_IDP’
/usr/include/netinet/in.h:51: error: previous definition of ‘IPPROTO_IDP’ was here
/usr/include/linux/in.h:36: error: redeclaration of enumerator ‘IPPROTO_RSVP’
/usr/include/netinet/in.h:61: error: previous definition of ‘IPPROTO_RSVP’ was here
/usr/include/linux/in.h:37: error: redeclaration of enumerator ‘IPPROTO_GRE’
/usr/include/netinet/in.h:63: error: previous definition of ‘IPPROTO_GRE’ was here
/usr/include/linux/in.h:39: error: redeclaration of enumerator ‘IPPROTO_IPV6’
/usr/include/netinet/in.h:55: error: previous definition of ‘IPPROTO_IPV6’ was here
/usr/include/linux/in.h:41: error: redeclaration of enumerator ‘IPPROTO_ESP’
/usr/include/netinet/in.h:65: error: previous definition of ‘IPPROTO_ESP’ was here
/usr/include/linux/in.h:42: error: redeclaration of enumerator ‘IPPROTO_AH’
/usr/include/netinet/in.h:67: error: previous definition of ‘IPPROTO_AH’ was here
/usr/include/linux/in.h:43: error: redeclaration of enumerator ‘IPPROTO_PIM’
/usr/include/netinet/in.h:79: error: previous definition of ‘IPPROTO_PIM’ was here
/usr/include/linux/in.h:45: error: redeclaration of enumerator ‘IPPROTO_COMP’
/usr/include/netinet/in.h:81: error: previous definition of ‘IPPROTO_COMP’ was here
/usr/include/linux/in.h:46: error: redeclaration of enumerator ‘IPPROTO_SCTP’
/usr/include/netinet/in.h:83: error: previous definition of ‘IPPROTO_SCTP’ was here
/usr/include/linux/in.h:48: error: redeclaration of enumerator ‘IPPROTO_RAW’
/usr/include/netinet/in.h:85: error: previous definition of ‘IPPROTO_RAW’ was here
/usr/include/linux/in.h:50: error: redeclaration of enumerator ‘IPPROTO_MAX’
/usr/include/netinet/in.h:88: error: previous definition of ‘IPPROTO_MAX’ was here
/usr/include/linux/in.h:54: error: redefinition of ‘struct in_addr’
/usr/include/linux/in.h:113: error: redefinition of ‘struct ip_mreq’
/usr/include/linux/in.h:119: error: redefinition of ‘struct ip_mreqn’
/usr/include/linux/in.h:125: error: redefinition of ‘struct ip_mreq_source’
/usr/include/linux/in.h:131: error: redefinition of ‘struct ip_msfilter’
/usr/include/linux/in.h:144: error: redefinition of ‘struct group_req’
/usr/include/linux/in.h:150: error: redefinition of ‘struct group_source_req’
/usr/include/linux/in.h:157: error: redefinition of ‘struct group_filter’
/usr/include/linux/in.h:170: error: redefinition of ‘struct in_pktinfo’
/usr/include/linux/in.h:178: error: redefinition of ‘struct sockaddr_in’
iptv.c:58:2: warning: no newline at end of file
Под линукс первый файл компилю :)
ПС Ранее кодил под винду на BCB.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Помогите откомпилировать файл
« Ответ #1 : 23.05.2009 13:45:41 »
Попробуйте компилить не с конкретными хидерами ядра, а с glibc-kernheaders (/usr/include/linux-default/include/linux/)

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Помогите откомпилировать файл
« Ответ #2 : 23.05.2009 13:57:53 »
Прошу прощение, но можно чуть подробнее.
Для меня, это все, пока не понятно.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Помогите откомпилировать файл
« Ответ #3 : 23.05.2009 14:13:15 »
Самое простое - поменять
<linux/mroute.h>
на
<linux-default/mroute.h>

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Помогите откомпилировать файл
« Ответ #4 : 23.05.2009 16:09:49 »
В linux-default файл mroute.h отсутствует, а вот тут есть linux-default/include/linux/mroute.h, но ошибки точно такие же.

сейчас смотрю
1.    /usr/include/linux-default/include/linux/
эдентично
2.   /usr/include/linux/
т.к. linux в последнем случае это ссылка на первый случай
Что-же делать?

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Помогите откомпилировать файл
« Ответ #5 : 23.05.2009 16:27:34 »
Пакет glibc-kernheaders установлен?