小编her*_*sen的帖子

在共享库中使用全局变量

我在C中编写一个使用全局变量(日志文件结构)的应用程序.在我的应用程序中,我在运行时动态加载共享库,我想使用指向相同日志文件结构的全局变量来记录共享库.

这似乎不太可能采用简单的方法:

  • 将全局变量声明为extern将不起作用,因为dlopen()sas表示全局变量是未定义的符号
  • 再次定义全局变量将起作用,但"new"变量将不同于可执行文件中的"原始"变量

任何暗示如何解决这个问题都会很棒.

谢谢!

c unix shared shared-libraries

7
推荐指数
1
解决办法
5143
查看次数

召唤缓慢的原因

我正在编写两个应用程序(在C中),这些应用程序进行多次发送和接收调用(例如,我正在实现远程文件复制).

我总是发送一个64字节的标题,其中包含以下消息正文的长度和一些其他信息.

在一些文件上测试我的应用程序时,我发现一些recv调用需要很长时间才能完成(大约40 毫秒).使用strace我发现它首先发送一个377字节的消息体(在这种情况下它是我要复制的文件的全部内容).

服务器应用程序开始发送消息体,大约需要48 us.现在客户端应用程序消耗大约38 毫秒来接收这些字节.

从那时起,每个接收呼叫消耗这么多时间,因为它们每个都在接收中阻塞并等待回复.

服务器的strace

[pid 27158] 1292236124.465827发送(6,"\ 0\0\1\271\0\0\0\0\0\0\0\0core.fwrite\0\0\0\0\0\0\0\0\0\0"...,64,0)= 64 <0.000031>

[pid 27158] 1292236124.466074发送(6,"\ 0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\0\1\\ 0\0\0\0\0\0\0\1\0\0\0\0"......,377,0)= 377 <0.000048>

客户的strace

[pid 27159] 1292236124.466364 recv(4,"\ 0\0\1\271\0\0\0\0\0\0\0\0core.fwrite\0\0\0\0\0\0\0\0\0\0"...,64,0)= 64 <0.000027>

[pid 27159] 1292236124.466597 recv(4,"\ 0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\0\1\1\\ 0\0\0\0\0\0\0\1\0\0\0\0"......,377,0)= 377 <0.037456>

这个问题确实给我带来了困难,因为我不明白为什么客户端上的接收呼叫花了这么多时间.

任何提示都将受到高度赞赏.

c sockets linux

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

访问dll中的全局变量

如何访问在dll中我的应用程序的main()函数中初始化的全局变量?

我的全局变量包含一个临界区对象,我需要锁定一个dll.

我试图在我的应用程序中导出它并使用它在dll中导入它

__declspec(dllexport)并且__declspec(dllimport) 但是当我试图锁定关键节,我收到了runtine例外,这让我觉得我的dll访问变量未正确初始化.

使用LoadLibrary在运行时加载dll.

任何提示将不胜感激.

c windows dll global-variables

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

标签 统计

c ×3

dll ×1

global-variables ×1

linux ×1

shared ×1

shared-libraries ×1

sockets ×1

unix ×1

windows ×1