繁体   English   中英

如何编译动态库?

[英]How to compile a dynamic library?

我已经在网上搜索了几天,但似乎找不到关于如何执行此操作的明确说明。

SQLite没有正弦,余弦等数学函数。我找到了一个扩展SQLite并添加这些函数的库,但我不知道如何编译该库。

http://lhealy.livejournal.com/6306.html

我已经尝试了几乎所有内容(解决方案除外)。 我下载了SQLite源,配置并使用了make,然后尝试在扩展的源目录中使用以下命令来构建动态库。

gcc -fPIC func_ext.c -shared -o libsqlitefunctions.so -Isqlite3 -Isqlite3 / src

我在此目录中包含sqlite3源,因此-I标志应指向正确的目录。 这是我得到的错误。

func_ext.c:91: error: static declaration of ‘acosh’ follows non-static declaration
func_ext.c:99: error: static declaration of ‘asinh’ follows non-static declaration
func_ext.c:107: error: static declaration of ‘atanh’ follows non-static declaration
func_ext.c:403: error: conflicting types for ‘isblank’
/usr/include/ctype.h:242: error: previous definition of ‘isblank’ was here
func_ext.c: In function ‘properFunc’:
func_ext.c:422: warning: pointer targets in passing argument 1 of ‘sqlite3StrDup’ differ in signedness
func_ext.c:422: warning: pointer targets in assignment differ in signedness
func_ext.c: In function ‘padlFunc’:
func_ext.c:463: warning: pointer targets in assignment differ in signedness
func_ext.c: In function ‘padrFunc’:
func_ext.c:509: warning: pointer targets in assignment differ in signedness
func_ext.c: In function ‘padcFunc’:
func_ext.c:556: warning: pointer targets in assignment differ in signedness
func_ext.c: In function ‘strfilterFunc’:
func_ext.c:607: warning: pointer targets in assignment differ in signedness
func_ext.c:608: warning: pointer targets in assignment differ in signedness
func_ext.c:616: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c:618: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c: In function ‘_substr’:
func_ext.c:654: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c:659: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c:664: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c:665: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c: In function ‘charindexFunc’:
func_ext.c:716: warning: pointer targets in passing argument 1 of ‘_substr’ differ in signedness
func_ext.c:716: warning: pointer targets in passing argument 2 of ‘_substr’ differ in signedness
func_ext.c: In function ‘rightFunc’:
func_ext.c:775: warning: pointer targets in assignment differ in signedness
func_ext.c:779: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c: In function ‘ltrimFunc’:
func_ext.c:833: warning: pointer targets in assignment differ in signedness
func_ext.c: In function ‘rtrimFunc’:
func_ext.c:851: warning: pointer targets in assignment differ in signedness
func_ext.c: In function ‘trimFunc’:
func_ext.c:872: warning: pointer targets in assignment differ in signedness
func_ext.c: In function ‘replaceFunc’:
func_ext.c:914: warning: pointer targets in assignment differ in signedness
func_ext.c:915: warning: pointer targets in assignment differ in signedness
func_ext.c:916: warning: pointer targets in assignment differ in signedness
func_ext.c: In function ‘reverseFunc’:
func_ext.c:975: warning: pointer targets in assignment differ in signedness
func_ext.c:982: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c: In function ‘differenceFunc’:
func_ext.c:1336: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness
func_ext.c:1336: warning: pointer targets in passing argument 1 of ‘sqlite3ReadUtf8’ differ in signedness

谢谢! 桑德罗

考虑使用g ++代替gcc,后者会在编译c ++时自动设置正确的设置。 例如,使用以下代码:

int f(int x)
{

}

int f(int x, int y)
{

}

int main(int argc, char* argv[])
{

}

...给出错误:

test.c:7: error: conflicting types for ‘f’
test.c:2: error: previous definition of ‘f’ was here

与g ++一样,这很好。 可能是代码确实在试图成为c,并且正在定义重载,这将是非法的,并且是一个更大的问题,但是我首先要试一下。

这些是编译器错误,而不是链接器错误。
您需要考虑使程序进行编译(以常规方式),然后才能考虑将其构建为共享库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM