共享库到底是如何用的?

现在我想知道共享库到底是如何用的,比如我编写了一段代码test.c,里面的函数想给别人用,但又不希望提供原代码,于是我用qcc -shared test.c -o libtest.so生成了一个名为libtest.so的库,但当我用qcc -ltest other.c -o target联编时,other.c是别人的程序,里边调用了定义在test.c里面的函数,但是编译时总是说函数没有定义,我的方法错在哪里呢?

xtang,请回答一下好吗?

-ltest放在编译命令行的最后面试试

same

是不是没有制定libtest.so的路径,试试加上 -L libpath

是不是没有指定libtest.so的路径,试试加上 -L libpath

对,加-L path或直接链接文件。

qcc -o target other.c -L pwd -l test

qcc -o target other.c pwd/libtest.so

在commonm.mk中加:
#===== EXTRA_OBJS - object files and libraries contributed additionaly on link/archive step
EXTRA_OBJS+=$(PROJECT_ROOT_rbCommonSL)/x86/so-g/libtest.so

这句话是我在LINK页面加引用时IDE自动生成的.

楼上的,还是不行呀,开始的错误是“implicit declaration of function”,这是编译都没有通过,再共享库中函数定义有什么特别吗?再windows下需要用export或import来导入或导出,QNX下是怎么规定的呢?另外为了让编译通过我不得不再other.c中首先声名了一下函数func()(test.c中的函数),现在编译通过了,可是出现错误提示“/usr/bin/ntox86-ld cannot open /libtest.so”的提示。

要引用lib中的函数,都要声名。要不然,/usr/include/下面那许多.h干什么用?你如果要编一个库给别人用,那你至少就得有比如test.h那样的头文件让人#include。

至于找不到libtest.so,那就是PATH没有设对了。

我的所有文件都是放在root目录下的,加了-L /root或 -L ‘pwd’ /root都不行呀!

$ pwd
/home/xtang/src/sotest
$ cat sotest.c
#include <stdio.h>

int function1(int i)
{
   printf("This is funciton1, i is %d\n", i);
   return i;
}
$ cat main.c
#include <stdio.h>

int main()
{
        function1(3);
        return 0;
}
$ qcc -shared -o libsotest.so sotest.c
$ qcc -o sotest main.c -L /home/xtang/src/sotest -lsotest
$ ./sotest
This is funciton1, i is 3
$ qcc -o sotest1 main.c -l/home/xtang/src/sotest/libsotest.so
$ ./sotest1
This is funciton1, i is 3

ok,多谢!