From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 13065 invoked from network); 21 May 2020 11:27:54 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 21 May 2020 11:27:54 -0000 Received: (qmail 26395 invoked by uid 550); 21 May 2020 11:27:48 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 26364 invoked from network); 21 May 2020 11:27:47 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bell-sw-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:message-id:date:user-agent:mime-version :content-transfer-encoding:content-language; bh=GVNDenZcragrdTnjZwkTNVKJCKv1qFJ/7rYRg+ujsbA=; b=LA+bE8cBN0DbIxbOjJxeIFPMF+RldzriBw/DohYwP3lVQmdh6DGX4sgFwqe57Aop23 GNZpPMfTsBxvBHaviVWFJuFFXVKAui/1I7mRMcXXY/aqm9aFa+x9UY8Hmer4YkurqvCN RpOAcV6OEMqMm59uALPAHKmKOd3tCtk094k4OM1VeECnyU9EtPSjGFiLTVUIrmqVYWYz U3kj3/2ZHeSms/DCWAj0NbOIEDKP+wXlWnic0TsCyR7aeoeMbbgMQXCNS3SQOQ/ltOUp liGUb6+rzjNNCuICH8zQh6/Tks76SLYmjBQYns6M8kyMFZL6RsnZGUzCxacGy2e4MAJ+ Y95Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:message-id:date:user-agent :mime-version:content-transfer-encoding:content-language; bh=GVNDenZcragrdTnjZwkTNVKJCKv1qFJ/7rYRg+ujsbA=; b=GunPQR4B3Vx0g2qFePzL1kQoRVHzKo61E5KhEBBC8TaUJS9AAmr7QUbzBycoEPAT8D evFzvth2BSEAHrReHLJTMfeZ9X+FvfnPjf0MmjGWp3z/JRUvSrYZkSDHAhzVqmJ5fdpQ QKNqkPCbxbnYrFp6LKt9v7ucrKzeUxfOAF7+xIj0aiz/e+oW5+n3avy8+UcIZK38KN4A BUVQy6OeViql0cOleQXFm8uG17cHsFLWbJp1dpqsQRUEKAMZIb4Dkid8aIADpD12MzrB qJjZQdGuBsTirgO7h9p73pJaxfgNCxDKCuh97UD2+J5PaJ5nfs2885Sgu2X63DMLfJda poQw== X-Gm-Message-State: AOAM531ZPq8esec3Yi1WgoTVEF6qFwSjVmIQktCQ5Zjotqdh6JCXgMsu gKm6WjJiH9K1snAwlsdNsrzk8HYWLsk= X-Google-Smtp-Source: ABdhPJyNwliDV4k+gNnf6w96vCXTMsNAA0EHuFktxKzYzhZrYXyVZrtWjbwR4Ba5hqT2cLgT8BfoLg== X-Received: by 2002:a2e:8144:: with SMTP id t4mr2600485ljg.412.1590060455709; Thu, 21 May 2020 04:27:35 -0700 (PDT) From: Alexander Scherbatiy To: musl@lists.openwall.com Message-ID: Date: Thu, 21 May 2020 14:27:24 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Subject: [musl] Shared library loading Hello, I use Alpine Linux 3.11.6 with musl libc (x86_64) version 1.1.24. I have two shared libraries "a" and "b" each of which is placed in its own directory and lib "b" depends on "a". First, I use dlopen to load lib "a" with "RTLD_NOW | RTLD_GLOBAL" flags. Second, I load lib "b" with  flag "RTLD_LAZY". The "b" library loading works on my Ubuntu 19.10 and fails on Alpine 3.11.6 with message:   dlopen failed: Error loading shared library liba.so: No such file or directory (needed by /root/load-lib-sample/bin/b/libb.so) Should it work on Alpine with musl libc as well? Below is the source code which reproduces the library loading issue: --- include/a.h --- void test_a(); --- include/b.h --- void test_b(); --- src/a.c --- #include "a.h" #include void test_a() {     printf("test a\n"); } --- src/b.c --- #include "b.h" #include "a.h" #include void test_b() {     printf("test b\n");     test_a(); } --- src/main.c --- #include #include #include void *open_lib(const char* base_dir, const char* lib_dir, const char *lib_name,int flags) {     char path_lib[256];     sprintf(path_lib, "%s/%s/%s", base_dir, lib_dir, lib_name);     printf("[load lib] %s\n", path_lib);     void *handle = dlopen(path_lib, flags);     if (!handle) {         fprintf(stderr, "dlopen failed: %s\n", dlerror());         exit(EXIT_FAILURE);     }     return handle; } void call_func(void *handle, const char *func_name) {     printf("[call func] %s\n", func_name);     void (*func_t)(void);     *(void **) (&func_t) = dlsym(handle, func_name);     char *error = dlerror();     if (error != NULL)  {         fprintf(stderr, "%s\n", error);         exit(EXIT_FAILURE);     }     (*func_t)(); } int main(int argc, char* argv[]) {     if (argc < 2) {         printf("provide base dir.\n");         exit(-1);     }     void *handle_a = open_lib(argv[1], "a", "liba.so", RTLD_NOW | RTLD_GLOBAL);     call_func(handle_a, "test_a");     void *handle_b = open_lib(argv[1], "b", "libb.so", RTLD_LAZY);     call_func(handle_b, "test_b");     dlclose(handle_b);     dlclose(handle_a); } --- build.sh --- rm -rf ./bin mkdir -p bin bin/a bin/b DIR_BIN=$(pwd)/bin gcc -g -shared src/a.c -Wl,-soname=liba.so -Iinclude -o bin/a/liba.so gcc -g -shared src/b.c -Wl,-soname=libb.so -Iinclude -la -Lbin/a -o bin/b/libb.so gcc -g src/main.c -Iinclude -o bin/main -ldl ./bin/main $DIR_BIN --- --- --- Output on Ubuntu 19.10 ---------- ./build.sh [load lib] /home/user/load-lib-sample/bin/a/liba.so [call func] test_a test a [load lib] /home/user/load-lib-sample/bin/b/libb.so [call func] test_b test b test a ---------- Output on Alpine 3.11.6 ---------- ./build.sh [load lib] /root/load-lib-sample/bin/a/liba.so [call func] test_a test a [load lib] /root/load-lib-sample/bin/b/libb.so dlopen failed: Error loading shared library liba.so: No such file or directory (needed by /root/load-lib-sample/bin/b/libb.so) ---------- Thanks, Alexander.