Skip to content

Fix a build issue from iocore cleanup#12000

Merged
moonchen merged 8 commits intoapache:masterfrom
moonchen:fix-iocore-cleanup
Feb 4, 2025
Merged

Fix a build issue from iocore cleanup#12000
moonchen merged 8 commits intoapache:masterfrom
moonchen:fix-iocore-cleanup

Conversation

@moonchen
Copy link
Contributor

The build of test_net was broken on Mac when the build mode is set to release.

Root cause:

We support two kinds of linkers. One kind will only search for symbols that are to the left of the object being linked. Another kind will search the list of libraries repeatedly until the no new undefined references are created. Both are sensitive to the order of libraries on the command line.

In order to work with both, we have to carefully order our dependencies in cmake. See the build rule for traffic_server for a working list of dependencies.

In this case, libinknet_stub.cc provides some symbols that are also provided by ts::proxy, in order to fix an issue of cyclic dependency between ts::inknet and ts::proxy. However, this causes the link to have duplicate symbols when libraries are not ordered correctly, on linkers that repeat through the list.

References:

https://stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries-are-linked-sometimes-cause-errors-in-gcc

The build of test_net was broken on Mac when the build mode is set to
release.

Root cause:

We support two kinds of linkers.  One kind will only search for
symbols that are to the left of the object being linked.  Another kind
will search the list of libraries repeatedly until the no new undefined
references are created.  Both are sensitive to the order of libraries
on the command line.

In order to work with both, we have to carefully order our dependencies
in cmake.  See the build rule for traffic_server for a working list of
dependencies.

In this case, libinknet_stub.cc provides some symbols that are also
provided by ts::proxy, in order to fix an issue of cyclic dependency
between ts::inknet and ts::proxy.  However, this causes the link to
have duplicate symbols when libraries are not ordered correctly, on
linkers that repeat through the list.

References:

https://stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries-are-linked-sometimes-cause-errors-in-gcc
@moonchen moonchen added this to the 10.1.0 milestone Jan 29, 2025
@moonchen moonchen added Build work related to build configuration or environment Must-Fix labels Jan 29, 2025
@bneradt bneradt self-requested a review February 3, 2025 23:23
Copy link
Member

@maskit maskit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works for me.

@moonchen moonchen merged commit 0dc80e8 into apache:master Feb 4, 2025
15 checks passed
yannk pushed a commit to yannk/trafficserver that referenced this pull request Feb 6, 2025
* Fix a build issue from iocore cleanup

The build of test_net was broken on Mac when the build mode is set to
release.

Root cause:

We support two kinds of linkers.  One kind will only search for
symbols that are to the left of the object being linked.  Another kind
will search the list of libraries repeatedly until the no new undefined
references are created.  Both are sensitive to the order of libraries
on the command line.

In order to work with both, we have to carefully order our dependencies
in cmake.  See the build rule for traffic_server for a working list of
dependencies.

In this case, libinknet_stub.cc provides some symbols that are also
provided by ts::proxy, in order to fix an issue of cyclic dependency
between ts::inknet and ts::proxy.  However, this causes the link to
have duplicate symbols when libraries are not ordered correctly, on
linkers that repeat through the list.

References:

https://stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries-are-linked-sometimes-cause-errors-in-gcc

Solution:

For ld, use link groups so the linker searches the group repeatedly until symbols are resolved. 

For other linkers, carefully order the static libraries so the duplicate symbols are resolved before their stubs are seen.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Build work related to build configuration or environment Must-Fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants