On 7/27/22 23:02, David Marchand wrote: > On Mon, Jul 25, 2022 at 2:29 PM Ilya Maximets <i.maxim...@ovn.org> wrote: >> >> Current version of debian/rules simply passes the libopenvswitch.a >> as a command line argument via LDFLAGS, but that doesn't actually >> lead to this library being statically linked into python extension, >> which is a shared library. Instead, the build "succeeds", but the >> resulted extension is not usable, because most of the symbols are >> missing: >> >> from ovs import _json >> >> ImportError: >> /usr/lib/python3/dist-packages/ovs/_json.cpython-310-x86_64-linux-gnu.so: >> undefined symbol: json_parser_finish >> >> '-lopenvswitch' with a path to a static library should be passed >> instead to make it actually statically linked. But even that is not >> enough as all the libraries that libopenvswitch.a was built with also >> has to be passed. Otherwise, we'll have unresolved symbols like ssl, >> cap-ng, etc. >> >> The most convenient way to get all the required libraries and cflags >> seems to be by using pkg-config. >> >> Setting several environment variables for pkg-config, so it can find >> the libopenvswitch.pc in non-standard directory, not skip default >> locations and also report them with the right base directory. >> >> Extra '-Wl,-Bstatic -lopenvswitch -Wl,-Bdynamic' is added before all >> the libs to ensure static linking of libopenvswitch even if the >> dynamic library is available in a system. > > Did you consider the simple :filename form to tell ld to link an archive? > Here that would translate to a simple -l:libopenvswitch.a
Yes, I looked into that. There shouldn't be any difference for this particular use case. -l:filename syntax is supported since binutils 2.18 that was released about 11 years ago, not sure if that's a priblem or not. It's certainly not a problem for current debian packaging, since it will likely not work on systems that old anyway. > > This is only a suggestion to avoid adding too many -Wl options as they > stack up if you are not careful. I see. Though, it is probably not a big concern for this particular use-case. I can replace '-Wl,-Bstatic -lopenvswitch -Wl,-Bdynamic' with '-l:libopenvswitch.a' and send a new version, or replace on commit, if you think that will be better. I don't have a strong preference. What do you think? Frode, do you have any comments on this? Best regards, Ilya Maximets. _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev