小编Don*_*ool的帖子

很奇怪的链接器行为

这很奇怪,因为我能够通过删除对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'的引用?显然,有些事情我不明白,这让我感到烦恼......

linker gcc ld

45
推荐指数
4
解决办法
6万
查看次数

存储过程中是否存在SLEEP()的方法?

我有一个存储过程,我想永远运行,但在循环中睡一秒钟.当它醒来时,它会轮询一个表,看它是否应该做一些工作.工作只需要每分钟完成,因此不必担心轮询表会同时受到来自两个编写者的更新的影响.

存储过程中SLEEP()间隔的最佳方法是什么?实际上,如果它可以睡200毫秒,那将是很好的,但是一秒钟也会工作.

mysql sleep stored-procedures

13
推荐指数
3
解决办法
1万
查看次数

LOAD DATA INFILE可轻松将YYYYMMDD转换为YYYY-MM-DD?

嗨我有一个我要导入的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

10
推荐指数
1
解决办法
2万
查看次数

Innodb和临时表

我刚迁移到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做过多少工作,因为我刚刚开始运行.我确实设置了从默认值增加日志..但就是这样.所以配置是开箱即用的.

谢谢!

mysql

9
推荐指数
1
解决办法
2897
查看次数

接收部分消息的recv()的套接字编程问题

我有一个接收流式股票刻度数据的套接字.但是,我似乎得到了很多截断的消息,或者似乎是截断的消息.以下是我接收数据的方式:

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示例的循环(可验证的可行)?

c linux

4
推荐指数
2
解决办法
2万
查看次数

标签 统计

mysql ×3

c ×1

gcc ×1

ld ×1

linker ×1

linux ×1

sleep ×1

stored-procedures ×1