这很奇怪,因为我能够通过删除对libm的引用来解决下面的错误.
gcc -o example example.o -Wl -L/home/kensey/cdev/lib -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -L/usr/lib/x86_64-linux-gnu -lm -lrt -ldl -lcdev -L/home/kensey/www.tools/gplot-lib -lgplot -L/home/kensey/www.tools/gd1_3ret -lgd -lxml2 -lcurl
/usr/bin/ld: /home/kensey/www.tools/gplot-lib/libgplot.a(set.o): undefined reference to symbol 'floor@@GLIBC_2.2.5'
/usr/bin/ld: note: 'floor@@GLIBC_2.2.5' is defined in DSO /usr/lib/x86_64-linux-gnu/libm.so so try adding it to the linker command line
/usr/lib/x86_64-linux-gnu/libm.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
所以,如果我删除-lm命令的一部分,我不会得到错误.但是,我想知道是否有人知道为什么删除对所需库的引用会解决这个问题.链接器如何知道要查找哪个库?另外 - 有没有办法查询已构建的可执行文件,并说'你在哪个库中解析了对'floor'的引用?显然,有些事情我不明白,这让我感到烦恼......
我有一个存储过程,我想永远运行,但在循环中睡一秒钟.当它醒来时,它会轮询一个表,看它是否应该做一些工作.工作只需要每分钟完成,因此不必担心轮询表会同时受到来自两个编写者的更新的影响.
存储过程中SLEEP()间隔的最佳方法是什么?实际上,如果它可以睡200毫秒,那将是很好的,但是一秒钟也会工作.
嗨我有一个我要导入的INFILE,但日期是以下形式:
AADR,20120403,31.43,31.43,31.4,31.4,1100
AAU,20120403,2.64,2.65,2.56,2.65,85700
AAVX,20120403,162.49,162.49,154.24,156.65,2200
Run Code Online (Sandbox Code Playgroud)
是否有任何简单的方法将日期转换为'2012-04-03'而无需先执行使用perl脚本打开它,转换日期,然后再将文件写回来?
TIA !!
我刚迁移到mysql 5.5.20并且我遇到了临时表的性能问题.我有一个存储过程,创建其中的八个,类似于:
create temporary table t_opened_today
(
portfolio_id integer,
position_type_id tinyint,
open_value decimal(12,2),
today_net decimal(12,2)
);
Run Code Online (Sandbox Code Playgroud)
在Mysql 5.5上,它将Innodb作为默认存储引擎.我曾经在5.1,而事实并非如此.所以,它正在用Innodb创建临时表.我通过查看/ tmp验证了这一点,并没有看到任何.MYI或.MYD.这需要0.50秒(或更多,执行时间在整个地方反弹),这是荒谬的.
所以,我修改了表定义以包含"Engine = MyISAM",并且花了0.00秒(正如人们所期望的那样)除了创建8个临时表并退出之外什么都不做.
任何人都知道为什么Innodb需要这么长时间来创建这些临时表?也许使用默认存储引擎创建临时表是某种巨大的禁忌?
我没有对my.cnf做过多少工作,因为我刚刚开始运行.我确实设置了从默认值增加日志..但就是这样.所以配置是开箱即用的.
谢谢!
我有一个接收流式股票刻度数据的套接字.但是,我似乎得到了很多截断的消息,或者似乎是截断的消息.以下是我接收数据的方式:
if((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv()");
exit(1);
}
else {
buf[numbytes] = '\0';
// Process data
}
Run Code Online (Sandbox Code Playgroud)
可以recv()接受的东西被送到只是部分消息?
我的感觉是我可能需要另外一个循环recv()来接收呼叫,直到发送完整的消息.我知道我有一个libcurl实现(我不认为这里不能使用libcurl)有一个外部循环:
// Read the response (sum total bytes read in tot_bytes)
for(tot_bytes=0; ; tot_bytes += iolen)
{
wait_on_socket(sockfd, 1, 60000L);
res = curl_easy_recv(curl, buf + tot_bytes, sizeof_buf - tot_bytes, &iolen);
if(CURLE_OK != res) {
// printf( "## %d", res );
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我是否需要一个recv()类似于libcurl示例的循环(可验证的可行)?