2010-01-17 1 views
0

Я пытаюсь выполнить некоторое программирование сокетов. У меня есть пример кода, который компилируется/выполняется просто отлично на 32-битной машине, но когда я пытаюсь скомпилировать тот же код на 64-битной машине, я получаю это несоответствие между/usr/includes/sys и/usr/includes/linux заголовочными файлами , Я бы подумал, что на 64-битной машине все заголовки уже «исправлены» для 64-битного использования. Может кто-нибудь, пожалуйста, дайте мне несколько указателей на то, как решить эту проблему. Я использую linux (fedora 9 64bit), GCC 4.3.2исходные сокеты на проблемах компиляции 64-битных машин

Спасибо!

компилировать следующим образом: GCC -Wall сервер server.c и -o получить следующие ошибки:

In file included from /usr/include/sys/uio.h:24, 
      from /usr/include/sys/socket.h:28, 
      from server.c:4: 
/usr/include/sys/types.h:46: error: conflicting types for ‘loff_t’ 
/usr/include/linux/types.h:30: error: previous declaration of ‘loff_t’ was here 
/usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’ 
/usr/include/linux/types.h:13: error: previous declaration of ‘dev_t’ was here 
In file included from /usr/include/sys/types.h:133, 
      from /usr/include/sys/uio.h:24, 
      from /usr/include/sys/socket.h:28, 
      from server.c:4: 
/usr/include/time.h:105: error: conflicting types for ‘timer_t’ 
/usr/include/linux/types.h:22: error: previous declaration of ‘timer_t’ was here 
In file included from /usr/include/sys/uio.h:24, 
      from /usr/include/sys/socket.h:28, 
      from server.c:4: 
/usr/include/sys/types.h:198: error: conflicting types for ‘int64_t’ 
/usr/include/linux/types.h:98: error: previous declaration of ‘int64_t’ was here 
/usr/include/sys/types.h:204: error: conflicting types for ‘u_int64_t’ 
/usr/include/linux/types.h:97: error: previous declaration of ‘u_int64_t’ was here 
In file included from /usr/include/sys/types.h:220, 
      from /usr/include/sys/uio.h:24, 
      from /usr/include/sys/socket.h:28, 
      from server.c:4: 
/usr/include/sys/select.h:78: error: conflicting types for ‘fd_set’ 
/usr/include/linux/types.h:12: error: previous declaration of ‘fd_set’ was here 
In file included from /usr/include/sys/uio.h:24, 
      from /usr/include/sys/socket.h:28, 
      from server.c:4: 
/usr/include/sys/types.h:235: error: conflicting types for ‘blkcnt_t’ 
/usr/include/linux/types.h:124: error: previous declaration of ‘blkcnt_t’ was here 
server.c: In function ‘main’: 
server.c:45: warning: implicit declaration of function ‘htons’ 
server.c: In function ‘sigint’: 
server.c:144: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘long int’ 
server.c:145: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘long int’ 

ответ

1

Вы не должны быть в том числе вещи из Linux /, что не поддерживается пользовательскими программами.

Также кажется, что вам не хватает некоторых из них, поскольку вы получаете предупреждение за htons().

Также вы должны использовать %ld в строке формата, а не только %d для печати long int переменных.

+0

В соответствии с кодом, который у меня есть, вы предполагаете использовать «linux includes», поскольку я пытаюсь отправить/получить пакеты на уровне ethernet. (Я не делаю ICMP или пинг или ничего подобного, но делаю свое дело). Я попытался удалить их, но потом я получаю еще больше ошибок. Вы говорите, что все, что определено в заголовках linux, также должно быть в заголовках «userland»? – NomadAlien

+0

@ nomad.alien: Это то, о чем я думал, да ... Я, похоже, сейчас не могу найти ссылку. Но все дублирующиеся предупреждения, которые вы получаете, показывают, что вы включаете больше, чем вам нужно. Мне было бы легче, если бы вы разместили какой-то скелетный код, я думаю. – unwind

+0

ОК, спасибо за советы всем. Я попробую несколько из упомянутых вещей, и если это не сработает, я отправлю код. – NomadAlien

0

Предполагая, что ваша среда компиляции верна, я подозреваю, что макрос C определен, который не должен быть или один определяется, а это не должно и что это вызывает несовместимые определения типов. Посмотрите на заголовочные файлы, чтобы определить, что это за макрос.

Смежные вопросы