我已经为Tomcat编译和部署了本机连接器,并运行了我的负载测试基准测试.没有可测量的差异.
所以我的问题是,在哪种情况下原生连接器显然更快?他们可以调整以获得更多的表现.
我的意思并不是"我如何基准显示增加",而是在什么情况下建议使用连接器.到目前为止,我看不出我的应用程序有什么不同,所以我想知道这些连接器的好处是什么.
我正在开发一个可以独立执行的共享库,以打印它自己的版本号.
我已将自定义入口点定义为:
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
void my_main() {
printf("VERSION: %d\n", 0);
_exit(0);
}
Run Code Online (Sandbox Code Playgroud)
我编译
gcc -o list.os -c -g -Wall -fPIC list.c
gcc -o liblist.so -g -Wl,-e,my_main -shared list.os -lc
Run Code Online (Sandbox Code Playgroud)
此代码编译和运行完美.
我的问题是当我将printf的参数更改为float或double(%f或%lf)时.然后该库将编译,但段错误运行时.
有人有主意吗?
EDIT1:
以下是段错误的代码:
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
void my_main() {
printf("VERSION: %f\n", 0.1f);
_exit(0);
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:
其他环境细节:
uname -a
Run Code Online (Sandbox Code Playgroud)
Linux mjolnir.site 3.1.10-1.16-desktop#1 SMP PREEMPT Wed Jun 27 05:21:40 UTC 2012(d016078)x86_64 x86_64 x86_64 GNU/Linux
gcc --version
Run Code Online (Sandbox Code Playgroud)
gcc(SUSE Linux)4.6.2 …
问候,
这是我的SConstruct文件:
env = Environment()
env.Append(CCFLAGS=['-g','-pg'])
env.Program(target='program1', source= ['program1.c'])
Run Code Online (Sandbox Code Playgroud)
这里还有编译的输出:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o program1.o -c -g -pg program1.c
gcc -o program1 program1.o
scons: done building targets.
Run Code Online (Sandbox Code Playgroud)
如您所见,我将"-pg"选项传递给构建环境.在我构建之后,我运行程序来生成"gmon.out",但它没有生成.
谁能证实这个问题?还是有解决方案?
谢谢.
更新:
感谢此处给出的建议,更新的工作SConstruct文件如下所示.链接器需要标志,因此要通过scons传递它,必须使用"LINKFLAGS"选项.
env = Environment()
env.Append(CCFLAGS=['-g','-pg'], LINKFLAGS=['-pg'])
env.Program(target='program1', source= ['program1.c'])
Run Code Online (Sandbox Code Playgroud)
编译输出:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o program1.o -c -g -pg program1.c
gcc -o program1 -pg program1.o
scons: …
Run Code Online (Sandbox Code Playgroud) 在我的基于CMake的项目中,我在我的CMakeLists.txt中有一个变量,它允许后端定位.此变量的有效值有限,例如6.
我想缓存有效值的列表,以便用户可以选择要启用的功能.CMake应该验证变量.
这是可能的,如果是的话,怎么样?
我正在使用系统调用getaddrinfo()从DNS获取IP地址.
我想知道缓存信息是否存储在Linux上?
如果存储了缓存的信息,是否可以清除缓存信息?
我想知道如何清除缓存信息.
谢谢 .
我正在尝试分析部署在 JBoss Application Server 5 中的 Java EE 项目(EJB、Servlet、JSP)。
我想找到使用最多cpu和内存的方法。
有哪些推荐的方法和教程?
我正在尝试从jsp页面访问soap webservice.我需要一些简单轻巧的东西,因为这是一个模型.
提前致谢.
我正在寻找设计算法的经验法则,在这些算法中,由于磁盘速度、pci 速度(gpgpu)或其他瓶颈的限制,数据访问速度很慢。
另外,如何管理应用程序内存超过gpgpu内存的gpgpu程序?