How to compile custom modules?

Message boards : Questions and problems : How to compile custom modules?
Message board moderation

To post messages, you must log in.

AuthorMessage
using_namespace

Send message
Joined: 4 Apr 20
Posts: 7
Message 98284 - Posted: 2 May 2020, 18:48:39 UTC

I'm getting errors when trying to compile my own work generator.

I created a copy of boinc-src/sched/sample_work_generator.cpp in a separate folder and a simplified copy of Makefile from samples/example_app (because the Makefile from sched folder looks very complicated).

Here are my files:
boincadm@debian:~/boinc-src/sample_work_generator$ ls -l
total 16
-rw-r--r-- 1 boincadm boincadm 1128 May  2 21:40 Makefile
-rw-r--r-- 1 boincadm boincadm 8472 May  2 21:34 sample_work_generator.cpp


Here is my Makefile:
boincadm@debian:~/boinc-src/sample_work_generator$ cat Makefile
# This should work on Linux.  Modify as needed for other platforms.

BOINC_DIR = /home/boincadm/boinc-src
BOINC_API_DIR = $(BOINC_DIR)/api
BOINC_LIB_DIR = $(BOINC_DIR)/lib
BOINC_ZIP_DIR = $(BOINC_DIR)/zip
FREETYPE_DIR = /usr/include/freetype2

CXXFLAGS += -g \
	-Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -fno-common \
    -DAPP_GRAPHICS \
    -I$(BOINC_DIR) \
    -I$(BOINC_LIB_DIR) \
    -I$(BOINC_API_DIR) \
    -I$(BOINC_ZIP_DIR) \
    -I$(FREETYPE_DIR) \
    -I/home/boincadm/boinc-src/tools \
    -I/home/boincadm/boinc-src/sched \
    -I/home/boincadm/boinc-src/db \
    -I/usr/include/mysql \
    -L/usr/X11R6/lib \
    -L.

libstdc++.a:
	ln -s `g++ -print-file-name=libstdc++.a`

install: swg

# specify library paths explicitly (rather than -l)
# because otherwise you might get a version in /usr/lib etc.
swg: sample_work_generator.o libstdc++.a $(BOINC_API_DIR)/libboinc_api.a $(BOINC_LIB_DIR)/libboinc.a
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -o sample_work_generator sample_work_generator.o libstdc++.a -pthread \
	$(BOINC_API_DIR)/libboinc_api.a \
	$(BOINC_LIB_DIR)/libboinc.a


Here are the errors that I'm getting:
boincadm@debian:~/boinc-src/sample_work_generator$ make install
g++ -g -Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -fno-common -DAPP_GRAPHICS -I/home/boincadm/boinc-src -I/home/boincadm/boinc-src/lib -I/home/boincadm/boinc-src/api -I/home/boincadm/boinc-src/zip -I/usr/include/freetype2 -I/home/boincadm/boinc-src/tools -I/home/boincadm/boinc-src/sched -I/home/boincadm/boinc-src/db -I/usr/include/mysql -L/usr/X11R6/lib -L.   -c -o sample_work_generator.o sample_work_generator.cpp
ln -s `g++ -print-file-name=libstdc++.a`
g++ -g -Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -fno-common -DAPP_GRAPHICS -I/home/boincadm/boinc-src -I/home/boincadm/boinc-src/lib -I/home/boincadm/boinc-src/api -I/home/boincadm/boinc-src/zip -I/usr/include/freetype2 -I/home/boincadm/boinc-src/tools -I/home/boincadm/boinc-src/sched -I/home/boincadm/boinc-src/db -I/usr/include/mysql -L/usr/X11R6/lib -L.   -o sample_work_generator sample_work_generator.o libstdc++.a -pthread \
/home/boincadm/boinc-src/api/libboinc_api.a \
/home/boincadm/boinc-src/lib/libboinc.a
/usr/bin/ld: sample_work_generator.o: in function `make_job()':
/home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:74: undefined reference to `DB_WORKUNIT::DB_WORKUNIT(DB_CONN*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:86: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:86: undefined reference to `SCHED_CONFIG::download_path(char const*, char*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:113: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:113: undefined reference to `SCHED_CONFIG::project_path(char const*, ...)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:113: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:113: undefined reference to `create_work(DB_WORKUNIT&, char const*, char const*, char const*, char const**, int, SCHED_CONFIG&, char const*, char const*, char*)'
/usr/bin/ld: sample_work_generator.o: in function `main_loop()':
/home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:128: undefined reference to `check_stop_daemons()'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:130: undefined reference to `count_unsent_results(long&, long, int)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:138: undefined reference to `daemon_sleep(int)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:159: undefined reference to `daemon_sleep(int)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:161: undefined reference to `min_transition_time(double&)'
/usr/bin/ld: sample_work_generator.o: in function `main':
/home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:201: undefined reference to `is_arg(char const*, char const*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:209: undefined reference to `g_print_queries'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:216: undefined reference to `is_arg(char const*, char const*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:216: undefined reference to `is_arg(char const*, char const*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:219: undefined reference to `is_arg(char const*, char const*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:219: undefined reference to `is_arg(char const*, char const*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:229: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:229: undefined reference to `SCHED_CONFIG::parse_file(char const*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:237: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:237: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:237: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:237: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:237: undefined reference to `boinc_db'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:237: undefined reference to `DB_CONN::open(char*, char*, char*, char*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:246: undefined reference to `DB_BASE::lookup(char const*)'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:252: undefined reference to `config'
/usr/bin/ld: /home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:252: undefined reference to `SCHED_CONFIG::project_path(char const*, ...)'
/usr/bin/ld: sample_work_generator.o: in function `__static_initialization_and_destruction_0(int, int)':
/home/boincadm/boinc-src/sample_work_generator/sample_work_generator.cpp:67: undefined reference to `DB_APP::DB_APP(DB_CONN*)'
/usr/bin/ld: sample_work_generator.o: in function `DB_BASE::~DB_BASE()':
/home/boincadm/boinc-src/db/db_base.h:92: undefined reference to `vtable for DB_BASE'
/usr/bin/ld: sample_work_generator.o: in function `DB_APP::~DB_APP()':
/home/boincadm/boinc-src/db/boinc_db.h:136: undefined reference to `vtable for DB_APP'
/usr/bin/ld: sample_work_generator.o: in function `DB_WORKUNIT::~DB_WORKUNIT()':
/home/boincadm/boinc-src/db/boinc_db.h:218: undefined reference to `vtable for DB_WORKUNIT'
collect2: error: ld returned 1 exit status
make: *** [Makefile:32: swg] Error 1


What should be the correct approach when I want to compile my own modules like work generators or validators?
ID: 98284 · Report as offensive
using_namespace

Send message
Joined: 4 Apr 20
Posts: 7
Message 98320 - Posted: 4 May 2020, 8:36:18 UTC - in response to Message 98284.  

The issue is fixed in this way:

g++ sample_work_generator.cpp -I. -I/home/boincadm/boinc-src -I/home/boincadm/boinc-src/api -I/home/boincadm/boinc-src/lib -I/home/boincadm/boinc-src/db -I/home/boincadm/boinc-src/sched -I/home/boincadm/boinc-src/tools -I/usr/include/mysql -pthread -Wall /home/boincadm/boinc-src/sched/libsched.a /home/boincadm/boinc-src/lib/libboinc.a /home/boincadm/boinc-src/api/libboinc_api.a /usr/lib/x86_64-linux-gnu/libmysqlclient.a /usr/lib/x86_64-linux-gnu/libssl.a /usr/lib/x86_64-linux-gnu/libcrypto.a /home/boincadm/boinc-src/lib/libboinc_crypt.a -lz -ldl -o sample_work_generator
ID: 98320 · Report as offensive

Message boards : Questions and problems : How to compile custom modules?

Copyright © 2024 University of California.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.