Привет и спасибо заранее за все проблемы, которые эта платформа решила для меня в прошлом. К сожалению, я нашел проблему, которую я не мог решить.Ошибки с использованием UNIX time.h после изменения стандарта C на c99
Я довольно новичок в cmake и расширил демонстрационный проект с новым исполняемым файлом и некоторыми библиотечными файлами. У меня нет проблем с компиляцией демонстрационного проекта. Однако мой новый проект необходимо скомпилировать с помощью стандартного c99, и вдруг я получаю ошибки, реализующие структуру timespec с time.h. Это также используется в демонстрационном проекте, поэтому я снова скомпилировал демо с c99, и у меня такая же проблема.
Запуск этого на Ubuntu, с помощью компилятора GCC и CMake версии 2.8.7
Надежда У меня есть все необходимые детали покрыты. Если нет, сообщите мне и заблаговременно за ваши усилия!
С наилучшими пожеланиями
Edit # 1: Сообщения об ошибках я получаю:
-> CLOCK_MONOTONIC < не объявлена (первым использовать в этой функции)
- поле 'tv_nsec' не может быть решен
- поле " tv_sec»не может быть решена
- символ 'CLOCK_MONOTONIC' не может быть решена
- Предупреждения о неявном объявлении функций 'clock_gettime', 'nanosleep', 'timeradd', '' timercmp
Edit # 2: выход ошибка марки VERBOSE = 1
/usr/bin/gcc -D_XOPEN_SOURCE=600 -I/home/localadmin/Eclipse_Workspace/SOEM_master/soem -I/home/localadmin/Eclipse_Workspace/SOEM_master/osal -I/home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux -I/home/localadmin/Eclipse_Workspace/SOEM_master/oshw/linux -std=c99 -o CMakeFiles/soem.dir/osal/linux/osal.c.o -c /home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux/osal.c
/home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux/osal.c:60:50: Warning: »struct timezone« declared in parameter list [activated by default]
/home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux/osal.c:60:50: Warning: range of validity includes only this definition or declaration [activated by default]
/home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux/osal.c: In function »osal_timer_start«:
/home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux/osal.c:105:4: Warning: Implicit function »timeradd« [-Wimplicit-function-declaration]
/home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux/osal.c: In function »osal_timer_is_expired«:
/home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux/osal.c:120:4: Warning: Implicit declaration of function »timercmp« [-Wimplicit-function-declaration]
/home/localadmin/Eclipse_Workspace/SOEM_master/osal/linux/osal.c:120:61: Error: expected expression before »<« token
make[2]: *** [CMakeFiles/soem.dir/osal/linux/osal.c.o] Error 1
make[2]: Leaving directory '/home/localadmin/Eclipse_Workspace/SOEM_master/build'
make[1]: *** [CMakeFiles/soem.dir/all] Error 2
make[1]: Leaving directory '/home/localadmin/Eclipse_Workspace/SOEM_master/build'
make: *** [all] Error 2
Это был выход после definining _XOPEN_SOURCE = 600, что было предложено в другом потоке, который был размещен ниже. Таким образом, структура timespec доступна, но функций нет.
Edit # 3: минимальный, полный и проверяемый пример
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
int main()
{
struct timespec test;
test.tv_sec = 0;
struct timeval start_time;
struct timeval timeout;
struct timeval stop_time;
timeradd(&start_time, &timeout, &stop_time);
return 0;
}
компилируется без проблем. Если я использую GCC mcv_example.c -std = C99 я получаю:
mcv_example.c: In function 'main':
mcv_example.c:24:18: error: storage size of 'test' isn't known
mcv_example.c:29:2: warning: implicit declaration of function 'timeradd' [-Wimplicit-function-declaration]
Редактировать # 4: Решение для меня было с помощью gnu99 вместо c99. Теперь я могу создать UNIX Makefiles с cmake, но не могу создать рабочий проект Eclipse.
Поскольку это другая проблема, я предполагаю, что этот случай закрыт, и спасибо всем за вашу помощь и усилия!
Пожалуйста, поделитесь ошибки, которые вы получите. –
Извините, не подумал об этом. Добавил его в оригинальное сообщение, чтобы его увидели больше людей. – jckaos
Нет смысла упоминать 'cmake' вообще. Просто скопируйте/вставьте ошибку, сообщенную gcc в оболочке после ввода: 'make VERBOSE = 1' – malat