C:在没有 main() 的情况下编译某些对象(用于共享库)失败?

标签 c gcc shared-libraries

根据我的了解,我需要按照以下步骤来准备创建共享库:

gcc -fPIC libfoo.c -o libfoo.o

然后我链接它。我曾尝试制作一个 makefile 来帮助执行这些步骤,但现在似乎出现了错误。

这发生在我运行 make 文件时:

foo@box:~/Projects/so$ gcc -fPIC ./libfoo.c -o libfoo.o
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

我如何编译没有 main 函数的库文件,因为它不是一个程序,而是一个库?

如果它对我的程序有帮助,基本上就是这样(解释)

(stdio and openssl headers here)

(debugging macro definitions here)

(two functions, gettime() and opensslrandom() defined here)

我对宏的理解似乎也有问题,因为它们最终会在共享库中,但它们在共享库中毫无用处?我将它们包含在要包含的 libfoo.h 中,尽管我还没有看到宏是否有效。

最佳答案

你需要-c

gcc -fPIC -c libfoo.c 

用于生成目标文件。

您可能想看看:http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

关于C:在没有 main() 的情况下编译某些对象(用于共享库)失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5447030/

相关文章:

linux - 如何构建在 Linux 上动态链接的 qt 应用程序(非共享库)

C++ : How to find the minimum library to include

c - 结构体外部的指针和结构体内部的指针指向同一个数组,但存储地址不同

使用预增量或后增量运算符的情况

c - 为什么 gcc 中 '-l' 选项的顺序很重要?

c++ - 如何使用 GCC 配置 Mono Include Directory 路径

c++ - 有哪些简单的 zlib 教程?

c - 如何用 extern 解决新声明的多个先前声明?

c++ - Boost Asio GCC 链接错误

c - 32位x86代码是否需要专门为共享库文件进行PIC编译?