[GH-ISSUE #71] Android compatibility #38

Open
opened 2026-10-13 21:05:38 +00:00 by bsakaguchi · 2 comments
Owner

Originally created by @Unb0rn on GitHub (Feb 16, 2025).
Original GitHub issue: https://github.com/amnezia-vpn/amneziawg-linux-kernel-module/issues/71

I'm trying to build amneziawg into Android kernel
I get an error: error: implicit declaration of function 'get_random_u8' [-Werror,-Wimplicit-function-declaration]
The majority of modern kernels are built with clang so - is this a compatibility issue of some sort?

Also, I'm building for 5.4-qgki - do we even have this get_random_u8?

Originally created by @Unb0rn on GitHub (Feb 16, 2025). Original GitHub issue: https://github.com/amnezia-vpn/amneziawg-linux-kernel-module/issues/71 I'm trying to build amneziawg into Android kernel I get an error: ` error: implicit declaration of function 'get_random_u8' [-Werror,-Wimplicit-function-declaration]` The majority of modern kernels are built with clang so - is this a compatibility issue of some sort? Also, I'm building for 5.4-qgki - do we even have this get_random_u8?
Author
Owner

@Unb0rn commented on GitHub (Feb 16, 2025):

Oh! Stupid me, this is literally the last commit. So is there any chance we'll have a new release anytime soon? Just to pull the archive from trusted source the same way as the official android_kernel_wireguard?

<!-- gh-comment-id:2661646643 --> @Unb0rn commented on GitHub (Feb 16, 2025): Oh! Stupid me, this is literally the last commit. So is there any chance we'll have a new release anytime soon? Just to pull the archive from trusted source the same way as the official `android_kernel_wireguard`?
Author
Owner

@Unb0rn commented on GitHub (Feb 16, 2025):

Another thing - looks like it's impossible to build both wireguard and amneziawg as a built-in instead of modules
Linker will fail because of duplicate names:

ld.lld: error: duplicate symbol: wg_pubkey_hashtable_alloc
>>> defined in net/built-in.a(wireguard/peerlookup.o)
>>> defined in net/built-in.a(amneziawg/peerlookup.o)

ld.lld: error: duplicate symbol: wg_noise_init
>>> defined in net/built-in.a(wireguard/noise.o)
>>> defined in net/built-in.a(amneziawg/noise.o)

ld.lld: error: duplicate symbol: wg_packet_handshake_receive_worker
>>> defined in net/built-in.a(wireguard/receive.o)
>>> defined in net/built-in.a(amneziawg/receive.o)

ld.lld: error: duplicate symbol: wg_noise_precompute_static_static
>>> defined in net/built-in.a(wireguard/noise.o)
>>> defined in net/built-in.a(amneziawg/noise.o)

ld.lld: error: duplicate symbol: wg_packet_percpu_multicore_worker_alloc
>>> defined in net/built-in.a(wireguard/queueing.o)
>>> defined in net/built-in.a(amneziawg/queueing.o)

ld.lld: error: duplicate symbol: wg_packet_queue_init
>>> defined in net/built-in.a(wireguard/queueing.o)
>>> defined in net/built-in.a(amneziawg/queueing.o)

ld.lld: error: duplicate symbol: wg_packet_queue_free
>>> defined in net/built-in.a(wireguard/queueing.o)
>>> defined in net/built-in.a(amneziawg/queueing.o)

ld.lld: error: duplicate symbol: poly1305_init
>>> defined in net/built-in.a(wireguard/crypto/zinc/poly1305/poly1305.o)
>>> defined in net/built-in.a(amneziawg/crypto/zinc/poly1305/poly1305.o)

ld.lld: error: duplicate symbol: wg_pubkey_hashtable_add
>>> defined in net/built-in.a(wireguard/peerlookup.o)
>>> defined in net/built-in.a(amneziawg/peerlookup.o)

ld.lld: error: duplicate symbol: wg_pubkey_hashtable_remove
>>> defined in net/built-in.a(wireguard/peerlookup.o)
>>> defined in net/built-in.a(amneziawg/peerlookup.o)

ld.lld: error: duplicate symbol: wg_pubkey_hashtable_lookup
>>> defined in net/built-in.a(wireguard/peerlookup.o)
>>> defined in net/built-in.a(amneziawg/peerlookup.o)

ld.lld: error: duplicate symbol: wg_index_hashtable_alloc
>>> defined in net/built-in.a(wireguard/peerlookup.o)
>>> defined in net/built-in.a(amneziawg/peerlookup.o)

ld.lld: error: duplicate symbol: wg_index_hashtable_insert
>>> defined in net/built-in.a(wireguard/peerlookup.o)
>>> defined in net/built-in.a(amneziawg/peerlookup.o)

ld.lld: error: duplicate symbol: wg_index_hashtable_replace
>>> defined in net/built-in.a(wireguard/peerlookup.o)
>>> defined in net/built-in.a(amneziawg/peerlookup.o)

ld.lld: error: duplicate symbol: wg_genetlink_init
>>> defined in net/built-in.a(wireguard/netlink.o)
>>> defined in net/built-in.a(amneziawg/netlink.o)

ld.lld: error: duplicate symbol: wg_genetlink_uninit
>>> defined in net/built-in.a(wireguard/netlink.o)
>>> defined in net/built-in.a(amneziawg/netlink.o)

ld.lld: error: duplicate symbol: wg_peer_create
>>> defined in net/built-in.a(wireguard/peer.o)
>>> defined in net/built-in.a(amneziawg/peer.o)

ld.lld: error: duplicate symbol: wg_peer_get_maybe_zero
>>> defined in net/built-in.a(wireguard/peer.o)
>>> defined in net/built-in.a(amneziawg/peer.o)

ld.lld: error: duplicate symbol: wg_peer_remove
>>> defined in net/built-in.a(wireguard/peer.o)
>>> defined in net/built-in.a(amneziawg/peer.o)

ld.lld: error: duplicate symbol: wg_packet_rx_poll
>>> defined in net/built-in.a(wireguard/receive.o)
>>> defined in net/built-in.a(amneziawg/receive.o)

ld.lld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors)

And building it as a standalone module feels like pain due to Android module handling...

<!-- gh-comment-id:2661662964 --> @Unb0rn commented on GitHub (Feb 16, 2025): Another thing - looks like it's impossible to build both wireguard and amneziawg as a built-in instead of modules Linker will fail because of duplicate names: ``` ld.lld: error: duplicate symbol: wg_pubkey_hashtable_alloc >>> defined in net/built-in.a(wireguard/peerlookup.o) >>> defined in net/built-in.a(amneziawg/peerlookup.o) ld.lld: error: duplicate symbol: wg_noise_init >>> defined in net/built-in.a(wireguard/noise.o) >>> defined in net/built-in.a(amneziawg/noise.o) ld.lld: error: duplicate symbol: wg_packet_handshake_receive_worker >>> defined in net/built-in.a(wireguard/receive.o) >>> defined in net/built-in.a(amneziawg/receive.o) ld.lld: error: duplicate symbol: wg_noise_precompute_static_static >>> defined in net/built-in.a(wireguard/noise.o) >>> defined in net/built-in.a(amneziawg/noise.o) ld.lld: error: duplicate symbol: wg_packet_percpu_multicore_worker_alloc >>> defined in net/built-in.a(wireguard/queueing.o) >>> defined in net/built-in.a(amneziawg/queueing.o) ld.lld: error: duplicate symbol: wg_packet_queue_init >>> defined in net/built-in.a(wireguard/queueing.o) >>> defined in net/built-in.a(amneziawg/queueing.o) ld.lld: error: duplicate symbol: wg_packet_queue_free >>> defined in net/built-in.a(wireguard/queueing.o) >>> defined in net/built-in.a(amneziawg/queueing.o) ld.lld: error: duplicate symbol: poly1305_init >>> defined in net/built-in.a(wireguard/crypto/zinc/poly1305/poly1305.o) >>> defined in net/built-in.a(amneziawg/crypto/zinc/poly1305/poly1305.o) ld.lld: error: duplicate symbol: wg_pubkey_hashtable_add >>> defined in net/built-in.a(wireguard/peerlookup.o) >>> defined in net/built-in.a(amneziawg/peerlookup.o) ld.lld: error: duplicate symbol: wg_pubkey_hashtable_remove >>> defined in net/built-in.a(wireguard/peerlookup.o) >>> defined in net/built-in.a(amneziawg/peerlookup.o) ld.lld: error: duplicate symbol: wg_pubkey_hashtable_lookup >>> defined in net/built-in.a(wireguard/peerlookup.o) >>> defined in net/built-in.a(amneziawg/peerlookup.o) ld.lld: error: duplicate symbol: wg_index_hashtable_alloc >>> defined in net/built-in.a(wireguard/peerlookup.o) >>> defined in net/built-in.a(amneziawg/peerlookup.o) ld.lld: error: duplicate symbol: wg_index_hashtable_insert >>> defined in net/built-in.a(wireguard/peerlookup.o) >>> defined in net/built-in.a(amneziawg/peerlookup.o) ld.lld: error: duplicate symbol: wg_index_hashtable_replace >>> defined in net/built-in.a(wireguard/peerlookup.o) >>> defined in net/built-in.a(amneziawg/peerlookup.o) ld.lld: error: duplicate symbol: wg_genetlink_init >>> defined in net/built-in.a(wireguard/netlink.o) >>> defined in net/built-in.a(amneziawg/netlink.o) ld.lld: error: duplicate symbol: wg_genetlink_uninit >>> defined in net/built-in.a(wireguard/netlink.o) >>> defined in net/built-in.a(amneziawg/netlink.o) ld.lld: error: duplicate symbol: wg_peer_create >>> defined in net/built-in.a(wireguard/peer.o) >>> defined in net/built-in.a(amneziawg/peer.o) ld.lld: error: duplicate symbol: wg_peer_get_maybe_zero >>> defined in net/built-in.a(wireguard/peer.o) >>> defined in net/built-in.a(amneziawg/peer.o) ld.lld: error: duplicate symbol: wg_peer_remove >>> defined in net/built-in.a(wireguard/peer.o) >>> defined in net/built-in.a(amneziawg/peer.o) ld.lld: error: duplicate symbol: wg_packet_rx_poll >>> defined in net/built-in.a(wireguard/receive.o) >>> defined in net/built-in.a(amneziawg/receive.o) ld.lld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors) ``` And building it as a standalone module feels like pain due to Android module handling...
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
amnezia-vpn/amneziawg-linux-kernel-module#38
No description provided.