notandy / ympd

Standalone MPD Web GUI written in C, utilizing Websockets and Bootstrap/JS
http://www.ympd.org
GNU General Public License v2.0
515 stars 143 forks source link

Linker error when compiling latest master #193

Open lnjX opened 3 years ago

lnjX commented 3 years ago

Hello, I'm running on debian unstable and I've just tried to build ympd master. Unfortunately I got the following linker error:

Scanning dependencies of target mkdata
[ 10%] Building C object CMakeFiles/mkdata.dir/tools/mkdata.c.o
[ 20%] Linking C executable mkdata
[ 20%] Built target mkdata
[ 30%] Generating assets.c
Scanning dependencies of target ympd
[ 40%] Building C object CMakeFiles/ympd.dir/src/ympd.c.o
[ 50%] Building C object CMakeFiles/ympd.dir/src/mpd_client.c.o
[ 60%] Building C object CMakeFiles/ympd.dir/src/mongoose.c.o
[ 70%] Building C object CMakeFiles/ympd.dir/src/json_encode.c.o
[ 80%] Building C object CMakeFiles/ympd.dir/src/http_server.c.o
[ 90%] Building C object CMakeFiles/ympd.dir/assets.c.o
[100%] Linking C executable ympd
/usr/bin/ld: CMakeFiles/ympd.dir/src/mpd_client.c.o:(.bss+0x0): multiple definition of `mpd'; CMakeFiles/ympd.dir/src/ympd.c.o:(.bss+0x0): first defined here
/usr/bin/ld: CMakeFiles/ympd.dir/src/mpd_client.c.o:(.bss+0x190b0): multiple definition of `dirble_api_token'; CMakeFiles/ympd.dir/src/ympd.c.o:(.bss+0x190b0): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ympd.dir/build.make:205: ympd] Error 1
make[1]: *** [CMakeFiles/Makefile2:97: CMakeFiles/ympd.dir/all] Error 2
make: *** [Makefile:149: all] Error 2
SuperBFG7 commented 3 years ago

possible duplicate of #190

spendist commented 2 years ago

same as me

unera commented 3 months ago

Hi, there

Today i tried to build ympd, too. I have the same log at master:

$ LANG=C git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

$ git describe     
v1.0.1-170-g612f8fc
$ LANG=C cmake ..  -DCMAKE_INSTALL_PREFIX:PATH=/usr
-- The C compiler identification is GNU 13.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2") 
-- Found LibMPDClient: /usr/lib/x86_64-linux-gnu/libmpdclient.so  
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1k")  
-- Configuring done
-- Generating done
-- Build files have been written to: /home/unera/work/ympd/build

$ LANG=C make                                      
Scanning dependencies of target mkdata
[ 10%] Building C object CMakeFiles/mkdata.dir/tools/mkdata.c.o
[ 20%] Linking C executable mkdata
[ 20%] Built target mkdata
[ 30%] Generating assets.c
Scanning dependencies of target ympd
[ 40%] Building C object CMakeFiles/ympd.dir/src/ympd.c.o
[ 50%] Building C object CMakeFiles/ympd.dir/src/mpd_client.c.o
[ 60%] Building C object CMakeFiles/ympd.dir/src/mongoose.c.o
[ 70%] Building C object CMakeFiles/ympd.dir/src/json_encode.c.o
[ 80%] Building C object CMakeFiles/ympd.dir/src/http_server.c.o
[ 90%] Building C object CMakeFiles/ympd.dir/assets.c.o
[100%] Linking C executable ympd
/usr/bin/ld: CMakeFiles/ympd.dir/src/mpd_client.c.o:(.bss+0x0): multiple definition of `mpd'; CMakeFiles/ympd.dir/src/ympd.c.o:(.bss+0x0): first defined here
/usr/bin/ld: CMakeFiles/ympd.dir/src/mpd_client.c.o:(.bss+0x190b0): multiple definition of `dirble_api_token'; CMakeFiles/ympd.dir/src/ympd.c.o:(.bss+0x190b0): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ympd.dir/build.make:205: ympd] Error 1
make[1]: *** [CMakeFiles/Makefile2:97: CMakeFiles/ympd.dir/all] Error 2
make: *** [Makefile:149: all] Error 2
unera commented 3 months ago

I've just patched something and it is building fine for me

diff --git a/src/mpd_client.h b/src/mpd_client.h
index 447dd56..9fc55eb 100644
--- a/src/mpd_client.h
+++ b/src/mpd_client.h
@@ -96,9 +96,11 @@ struct t_mpd {

     int song_id;
     unsigned queue_version;
-} mpd;
+};
+
+extern struct t_mpd mpd;

-char dirble_api_token[28];
+extern char dirble_api_token[];

 struct t_mpd_client_session {
     int song_id;
diff --git a/src/ympd.c b/src/ympd.c
index 3aed7e6..2e23746 100644
--- a/src/ympd.c
+++ b/src/ympd.c
@@ -29,6 +29,8 @@
 #include "mpd_client.h"
 #include "config.h"

+char dirble_api_token[28];
+struct t_mpd mpd;
 extern char *optarg;

 int force_exit = 0;
spendist commented 3 months ago

Professional answers. Thank you so much.
cd ~/src/ympd, vim ympd.patch, and insert text above, run patch -p1<ympd.patch, ok, try again.. pass