printfs里面的共享对象(动态库)没有打印出来

时间:2009-04-13 14:07:01

标签: printf shared

我有一个共享对象,我使用Windows上的Real View开发人员套件工具链接命令在Windows上创建

armlink -o mylib.so<“我在这里给出的* .o文件”>

然后我使用gcc工具将应用程序与linux上的mylib.so共享库链接。

我在这个mylib.so中的函数内部有printf语句,但是当我运行最后一个可执行文件时,我没有在控制台上获得任何printf输出。(无论在哪里调用printfs,stdio.h都被包含在内)

共享库是否存在任何已知问题导致printf或任何系统函数/系统调用/运行时库函数无法正常工作?

或者这与我在基于Windows的编译器工具链上创建共享库的特殊设置有关,但是将此共享库与linux-gcc编译器工具上的应用程序相链接?

谢谢。

-AD

1 个答案:

答案 0 :(得分:0)

由于你的目标是arm,我认为这是C,在windows上编译一些文件然后在linux上链接应该不是问题。你有没有验证过这个?我建议在windows上制作一个hello.so,从hello.c链接:

#include <stdio.h>
void hello(void) {printf("Hello\n");}

然后从linux上的main.c链接main:

void hello(void);
int main(int argc, char *argv[]){ hello(); return 0; }

作为最小编译器链测试。


如果从最终可执行文件中定义的代码中调用printf(即不是共享库中的代码),您是否从中获得了任何输出?


确实

strings --print-file-name -a mylib.so final_executable | grep "string from printf in shared library"

返回两个事件?


中是否有对printf的引用
readelf -a mylib.so
readelf -a final_executable