- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个需要 2 个时间戳的程序:第一个进程结束时的时间戳,然后是第二个进程开始时的时间戳。然后得到两者的增量。
但我无法编译,因为链接器提示 clock_gettime
,给出 undefined symbol 错误。
gcc (GCC) 3.2.1
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
void delay(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
int main()
{
struct timespec start, stop;
double timeStampFull1;
double timeStampFull2;
FILE *fOut;
fOut = fopen("fileOut.txt", "a");
if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
perror( "clock gettime" );
exit( EXIT_FAILURE );
}
timeStampFull1 = (double)start.tv_sec + (double)(start.tv_nsec/1000000000.0);
delay(1);
if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
perror( "clock gettime" );
exit( EXIT_FAILURE );
}
timeStampFull2 = (double)stop.tv_sec + (double)(stop.tv_nsec/1000000000.0);
printf("tv1: %f \n", timeStampFull1);
printf("tv2: %f \n", timeStampFull2);
fprintf(fOut, "TimeStartOfTest\t\t\t%f\n", timeStampFull1);
fprintf(fOut, "TimeEndOfTest\t\t\t%f\n", timeStampFull2);
fclose(fOut);
return 0;
}
这是编译器(链接器)错误:
gcc -Wall -o time ./time.c
time.c:49:2: warning: no newline at end of file
Undefined first referenced
symbol in file
clock_gettime /var/tmp//ccuu5CKe.o
ld: fatal: Symbol referencing errors. No output written to time
collect2: ld returned 1 exit status
最佳答案
clock_gettime()
函数和许多其他函数可以在现代版本的 Solaris 上的 rt
(实时)库和 posix4
库(从有 POSIX part 4 aka POSIX.4 for 'Real Time' extensions 的时代开始)在古代版本上。实时功能现在包含在基础中 POSIX specification .
因此,要解析 clock_gettime()
:
-lrt
或者,因为这对您不起作用,所以添加 -lposix4
。-lrt
。在 macOS 上,函数(包括经常在 -lm
中找到的数学函数)位于主系统库中。 Apple 确实提供了一个虚拟的 -lm
库,但您不需要使用它。
深入研究一些历史,一些旧版本的 Solaris,例如 Solaris 9,我认为,Solaris 10 提供 -lposix4
;我没有使用过 Solaris 11,但我希望该库存在于那里,即使不再严格需要它。通常,手册页会告诉您使用函数所需的非标准库。浏览 Oracle 站点上的手册,我发现:
clock_gettime()
没有提到额外的图书馆。clock_gettime()
建议您需要 -lrt
。clock_gettime()
还建议您需要 -lrt
。clock_gettime()
也建议 -lrt
。因此,从表面上看,使用 -lrt
应该对您有用。但是,如果您使用的是足够旧的 Solaris 版本(GCC 的旧版本表明您可能没有使用最新版本的 Solaris),那么您可能需要使用 -lposix4
.
Google 搜索“libposix4.so solaris”会产生:
它说:
librt, libposix4 - POSIX.1b Realtime Extensions library
Historically, functions in this library provided many of the interfaces specified by the POSIX.1b Realtime Extension. See standards(5). This functionality now resides in libc(3LIB).
This library is maintained to provide backward compatibility for both runtime and compilation environments. The shared object is implemented as a filter on libc.so.1. New application development need not specify
–lrt
.
回头查看我的一个makefile
的版本控制信息,我发现在1996年11月,我在一个makefile中添加了-lposix4
; 1993 年 6 月的先前版本中没有此内容。所以,那是很久(很久)以前的事了。我不确定您使用的是哪个版本的 Solaris。维基百科 Solaris建议我对 Solaris 2.4 (1995) 或 Solaris 2.5 (1996) 进行更改。因此,可能是其中一个版本为 clock_gettime()
添加了 -lposix4
,或者可能是我在那个时间范围内编写了一个需要它的程序,但它可用更早。 (仅供娱乐,makefile
的第一个版本日期为 1987-01-27。它已经存在了很长一段时间!)
关于clock_gettime() undefined symbol SunOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60161137/
交换命令:/usr/sbin/swap -s 我什至尝试了类似 awk '/total/{print $2}'/usr/sbin/swap -s 的东西,但给了我错误 交换输出: total: 124
我正在尝试构建一个需要 2 个时间戳的程序:第一个进程结束时的时间戳,然后是第二个进程开始时的时间戳。然后得到两者的增量。 但我无法编译,因为链接器提示 clock_gettime,给出 undefi
如何仅以秒为单位确定 SunOS UNIX 机器上的正常运行时间? 在 Linux 上,我可以简单地 cat/proc/uptime 并采用第一个参数: cat /proc/uptime | awk
我有一个非常简单的单元测试,只分配很多字符串: public class AllocationSpeedTest extends TestCase { public void testAllo
我刚刚登陆 SunOS: $ uname -a SunOS sunfi95 5.9 Generic_122300-13 sun4u sparc SUNW,Sun-Fire-880 并拥有Sun工作室:
我正在关注 sed命令替换 xml 文件中的内容。 sed -e '//{ s;;;}' ${modified_name_file} > ${RESOURCES}/tempfile2.xml 这在 L
我在标题中提到了一个问题。 我的文件中有几行: 所以我需要获取"Hi" 标签的全部内容。但是我没有 gnu grep 并且无法安装它我不是机器上的根用户。我只能使用: Usage: gre
我刚刚开始使用 boost 库。对于我们的一个项目,我想使用 sun 编译器在 Sun OS 上编译 Boost 1.39.0。但是,如果我使用 http://www.boost.org/doc/li
我正在尝试让进程附加到 SunOS 上的端口 7085。我尝试了以下命令。 netstat -ntlp | grep 7085 没有返回任何内容 netstat -anop | grep 7085 也
我不确定我做错了什么。看起来 yanking 工作正常,但是当点击 p 粘贴时,我得到:E353: 寄存器中没有内容 " 我愿意: vim myFile V y :q! vim temp p 我错过了
我有一个在 Linux 下使用 GCC 4.2 开发的应用程序,它大量使用字符串流来包装和解包通过网络发送的数据。 (因为我使用的 Grid API 需要它)。在 Linux 下一切正常,但是当我部署
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我正在尝试弄清楚如何在 SunOS 上执行 system() 函数调用(用 C 语言),并且没有将任何内容打印到 stderr(或 stdout) 。目前,以下代码可在 Linux、OSX、HP-UX
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我试图在编译时检测 Solaris/SunOS 版本,以便我可以启用/禁用 port_create() 的使用和其他 API。 编译时是否有标识 SunOS/Solaris 版本的 header ?
#include int main() { char *str = "11111111-22222222 r-xp 00000000 00:0e 1843624 /lib/libdl.so
我正在尝试将端口号映射到正在运行/使用 SunOS 中的端口的应用程序 $netstat -tlnp netstat: illegal option -- t 似乎 -t 选项在 SunOS 中是非法
我试图在 中获得以下结果 1. 文件归档为 tar,当前日期作为 tar 名称的一部分。2.文件一旦归档就被删除。 /usr/sap/ST1/POC/backtest/*.txt has 2 txt
我有一个 C 程序,它在 Linux 下编译和运行良好,没有任何警告,但是当试图在 SunOS 上编译它时,我收到以下警告: test.c: In function `my_function': te
我执行了下面的 C 程序,它打印了给定 N (N #include #include #include int main() { FILE *fpin,*fpout; char ch[11], fi
我是一名优秀的程序员,十分优秀!