我想创建一个使用第三方静态库中的函数的共享库.例如,foo与bar从libfoobar.a.我知道我的主要应用程序也在使用foo并将导出该符号.所以我只是想链接bar以保存代码大小并保持'foo'未解析(因为它将由主应用程序提供).如果我包含libfoobar.a,链接器ld将在我的共享库中包含这两个函数.如果我不包括libfoobar.a,我的库将无法访问功能,bar因为应用程序本身没有链接bar.问题:
libfoobar.a到一个共享库?bar从libfoobar.a,并指定在连接线?bar将从您的应用程序中使用,因此bar不会加载共享库中的副本?要在第二个表中自动添加列以通过唯一索引将其绑定到第一个表,我有一个如下规则:
CREATE OR REPLACE RULE auto_insert AS ON INSERT TO user DO ALSO
INSERT INTO lastlogin (id) VALUES (NEW.userid);
Run Code Online (Sandbox Code Playgroud)
如果user.userid是一个整数,这可以正常工作.但是,如果它是一个序列(例如,类型为serial或bigserial),那么插入到lastlogin表中的是下一个序列id.所以这个命令:
INSERT INTO user (username) VALUES ('john');
Run Code Online (Sandbox Code Playgroud)
将列[1,'john',...]插入用户,但将列[2,...]插入lastlogin.以下2个解决方法确实有效,但第二个解决方案消耗了两倍的序列号,因为序列仍然是自动递增的:
CREATE OR REPLACE RULE auto_insert AS ON INSERT TO user DO ALSO
INSERT INTO lastlogin (id) VALUES (lastval());
CREATE OR REPLACE RULE auto_insert AS ON INSERT TO user DO ALSO
INSERT INTO lastlogin (id) VALUES (NEW.userid-1);
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果我插入多行,解决方法不起作用:
INSERT INTO user (username) …Run Code Online (Sandbox Code Playgroud) 而不是为函数声明函数指针typedef,是否可以从函数声明中获取它?
通常情况下,
int foo(int x);
typedef int (*fooFunc)(int);
fooFunc aFunc;
Run Code Online (Sandbox Code Playgroud)
我想要的是:
int foo(int x);
foo* aFunc;
Run Code Online (Sandbox Code Playgroud)
我想将它用于dlsym:
foo* aFunc;
aFunc = dlsym(lib, "foo");
aFunc(x);
Run Code Online (Sandbox Code Playgroud)
如果我更新foo并忘记更新fooFunc,反之亦然,那将是不好的.此外,我可能有许多函数,维护函数声明和与这些函数关联的函数指针typedef会更加有效.
结论:AndreyT的答案是最便携的,但如果您编写gcc代码,那么typeof是一个很好的解决方案.