Обсуждение: BUG #14215: External C function link failed on Mac OSX

Поиск
Список
Период
Сортировка

BUG #14215: External C function link failed on Mac OSX

От
max.fomitchev@gmail.com
Дата:
VGhlIGZvbGxvd2luZyBidWcgaGFzIGJlZW4gbG9nZ2VkIG9uIHRoZSB3ZWJz
aXRlOgoKQnVnIHJlZmVyZW5jZTogICAgICAxNDIxNQpMb2dnZWQgYnk6ICAg
ICAgICAgIE1heCBGb21pdGNoZXYKRW1haWwgYWRkcmVzczogICAgICBtYXgu
Zm9taXRjaGV2QGdtYWlsLmNvbQpQb3N0Z3JlU1FMIHZlcnNpb246IDkuNS4z
Ck9wZXJhdGluZyBzeXN0ZW06ICAgT1NYCkRlc2NyaXB0aW9uOiAgICAgICAg
CgpFeGFtcGxlIGNvZGUgbWFpbi5jcHA6DQoNCmV4dGVybiAiQyIgew0KICAg
ICNpbmNsdWRlIDxwb3N0Z3Jlcy5oPg0KICAgICNpbmNsdWRlIDxmbWdyLmg+
DQogICAgI2luY2x1ZGUgPHV0aWxzL2FycmF5Lmg+DQogICAgI2luY2x1ZGUg
PHV0aWxzL2xzeXNjYWNoZS5oPg0KICAgICNpbmNsdWRlIDxjYXRhbG9nL3Bn
X3R5cGUuaD4NCg0KICAgICNpZmRlZiBQR19NT0RVTEVfTUFHSUMNCiAgICAg
ICAgUEdfTU9EVUxFX01BR0lDOw0KICAgICNlbmRpZg0KDQogICAgUEdfRlVO
Q1RJT05fSU5GT19WMShwc3FsX25lYXJlc3QpOw0KICAgIERhdHVtIHBzcWxf
bmVhcmVzdChQR19GVU5DVElPTl9BUkdTKSB7DQogICAgICAgIGlmKFBHX0FS
R0lTTlVMTCgwKSB8fCBQR19BUkdJU05VTEwoMSkpIHsNCiAgICAgICAgICAg
IGVsb2coRVJST1IsICJET0MyVkVDOiBOVUxMIElOUFVUIERBVEEiKTsNCiAg
ICAgICAgICAgIFBHX1JFVFVSTl9OVUxMKCk7DQogICAgICAgIH0NCg0KICAg
ICAgICBBcnJheVR5cGUgKl9kb2NWZWN0b3IgPSBQR19HRVRBUkdfQVJSQVlU
WVBFX1AoMCk7DQogICAgICAgIE9pZCBlbFR5cGVWYWxzID0gQVJSX0VMRU1U
WVBFKF9kb2NWZWN0b3IpOw0KICAgICAgICBpZiAoZWxUeXBlVmFscyAhPSBG
TE9BVDRPSUQpIHsNCiAgICAgICAgICAgIGVsb2coRVJST1IsICJET0MyVkVD
OiBJTlZBTElEIElOUFVUIERBVEEgVFlQRSIpOw0KICAgICAgICAgICAgUEdf
UkVUVVJOX05VTEwoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGludDE2IHR5
cGVMZW5WYWxzID0gMDsNCiAgICAgICAgYm9vbCB0eXBlQnlWYWxWYWxzID0g
ZmFsc2U7DQogICAgICAgIGNoYXIgdHlwZUFsaWduVmFscyA9IGNoYXIoMCk7
DQogICAgICAgIGdldF90eXBsZW5ieXZhbGFsaWduKGVsVHlwZVZhbHMsICZ0
eXBlTGVuVmFscywgJnR5cGVCeVZhbFZhbHMsCiZ0eXBlQWxpZ25WYWxzKTsN
Cg0KICAgICAgICBEYXR1bSAqaW5wdXRWYWxzOw0KICAgICAgICBib29sICpu
dWxsVmFsczsNCiAgICAgICAgaW50IG5WYWxzOw0KICAgICAgICBkZWNvbnN0
cnVjdF9hcnJheShfZG9jVmVjdG9yLCBlbFR5cGVWYWxzLCB0eXBlTGVuVmFs
cywKdHlwZUJ5VmFsVmFscywgdHlwZUFsaWduVmFscywgJmlucHV0VmFscywg
Jm51bGxWYWxzLCAmblZhbHMpOw0KDQogICAgICAgIHBmcmVlKGlucHV0VmFs
cyk7DQogICAgICAgIHBmcmVlKG51bGxWYWxzKTsNCg0KICAgICAgICBQR19S
RVRVUk5fTlVMTCgpOw0KICAgIH0NCn0NCg0KQ29tcGlsaW5nOg0KYysrIC1J
L3Vzci9sb2NhbC9DZWxsYXIvcG9zdGdyZXNxbC85LjUuMy9pbmNsdWRlL3Nl
cnZlciAtZnBpYyAtYwouL21haW4uY3BwDQoNCkxpbmtpbmc6DQpjKysgLXNo
YXJlZCAtbyB0dHQuZHlsaWIgbWFpbi5vIA0KVW5kZWZpbmVkIHN5bWJvbHMg
Zm9yIGFyY2hpdGVjdHVyZSB4ODZfNjQ6DQogICJfZGVjb25zdHJ1Y3RfYXJy
YXkiLCByZWZlcmVuY2VkIGZyb206DQogICAgICBfcHNxbF9uZWFyZXN0IGlu
IG1haW4ubw0KICAiX2Vsb2dfZmluaXNoIiwgcmVmZXJlbmNlZCBmcm9tOg0K
ICAgICAgX3BzcWxfbmVhcmVzdCBpbiBtYWluLm8NCiAgIl9lbG9nX3N0YXJ0
IiwgcmVmZXJlbmNlZCBmcm9tOg0KICAgICAgX3BzcWxfbmVhcmVzdCBpbiBt
YWluLm8NCiAgIl9nZXRfdHlwbGVuYnl2YWxhbGlnbiIsIHJlZmVyZW5jZWQg
ZnJvbToNCiAgICAgIF9wc3FsX25lYXJlc3QgaW4gbWFpbi5vDQogICJfcGZy
ZWUiLCByZWZlcmVuY2VkIGZyb206DQogICAgICBfcHNxbF9uZWFyZXN0IGlu
IG1haW4ubw0KICAiX3BnX2RldG9hc3RfZGF0dW0iLCByZWZlcmVuY2VkIGZy
b206DQogICAgICBfcHNxbF9uZWFyZXN0IGluIG1haW4ubw0KbGQ6IHN5bWJv
bChzKSBub3QgZm91bmQgZm9yIGFyY2hpdGVjdHVyZSB4ODZfNjQNCmNsYW5n
OiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2Rl
IDEgKHVzZSAtdiB0byBzZWUKaW52b2NhdGlvbikNCgoK

Re: BUG #14215: External C function link failed on Mac OSX

От
Tom Lane
Дата:
max.fomitchev@gmail.com writes:
> Linking:
> c++ -shared -o ttt.dylib main.o

This is not a PG bug. Having said that, the above is never going to
work on OS X; it has its own ideas about how to do things.  Instead
of "-shared" you need "-bundle -bundle_loader /path/to/postgres",
and there are some other linker flags that are advisable too.
Also, PG expects the file extension for loadable modules to be .so
even on OSX.

It's usually better to use PGXS to build extensions, instead of
learning such details for yourself:
https://www.postgresql.org/docs/9.5/static/extend-pgxs.html
Or you can crib from one of the extensions in the contrib/
source tree.

            regards, tom lane