Skip to content

Commit c9f320f

Browse files
committed
Problem: absolute path inside dylib (fix #123)
add x86_64 dylib build update Makefile test dylib works fix main reformat add rpath option add rpath comment add more comment remove un-necessary change readme make simple add or typo add or for windows restore readme untar restore disable test separate test change name tidyup test fix compile option add comment remove mac-test
1 parent 59501a7 commit c9f320f

File tree

4 files changed

+72
-21
lines changed

4 files changed

+72
-21
lines changed

.github/workflows/mac-build.yml

+6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ jobs:
2626
- name: Build play-cpp-sdk library
2727
run: ./checkmac.sh && cargo build --package play-cpp-sdk --release --target x86_64-apple-darwin
2828

29+
- name: Test building demo project
30+
working-directory: demo
31+
run: make x86_64_build_test
32+
2933
- name: Build demo project
3034
working-directory: demo
3135
run: make x86_64_build
@@ -40,6 +44,8 @@ jobs:
4044
cp ./LICENSE build
4145
cp ./CHANGELOG.md build
4246
cd build
47+
install_name_tool -id @rpath/libplay_cpp_sdk.dylib ./lib/libplay_cpp_sdk.dylib
48+
otool -L ./lib/libplay_cpp_sdk.dylib
4349
tar zcvf ../play_cpp_sdk_${PLATFORM}.tar.gz *
4450
cd ..
4551
shasum -a 256 *.tar.gz > "checksums-$PLATFORM.txt"

README.md

+2-7
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,9 @@ The following build events are included in the project file:
5454
git clone https://github.com/crypto-com/play-cpp-sdk.git
5555
```
5656
2. Unzip the archive file into `demo` folder
57-
3. Copy the dynamic library to `/usr/local/lib`
58-
``` sh
59-
cd demo
60-
cp lib/libplay_cpp_sdk.dylib /usr/local/lib
61-
```
62-
4. Under `demo` folder and build the `demo` project
57+
3. Under `demo` folder and build the `demo` project
6358
``` sh
64-
make
59+
make x86_64_build
6560
```
6661

6762
### Linux

demo/Makefile

+39-2
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,17 @@ dynamic: easywsclient.o
5353
$(FLAGS) \
5454
-L lib \
5555

56-
x86_64_build: prepare_x86_64 easywsclient.o.x86_64
56+
# test whether dylib loading correctly
57+
x86_64_test_dylib:
58+
./demo test
59+
60+
x86_64_build: x86_64_build_static x86_64_build_dynamic
61+
62+
x86_64_build_test:x86_64_build_dynamic x86_64_test_dylib
63+
64+
x86_64_build_static: prepare_x86_64 easywsclient.o.x86_64
5765
arch -x86_64 \
58-
g++ -o demo \
66+
g++ -o demostatic \
5967
easywsclient.o \
6068
main.cc \
6169
chainmain.cc \
@@ -65,6 +73,35 @@ x86_64_build: prepare_x86_64 easywsclient.o.x86_64
6573
-std=c++14 \
6674
$(FLAGS)
6775

76+
# use -rpath option to add the path to the dynamic library loading path
77+
# -rpath lib in gcc or
78+
# install_name_tool -add_rpath @executable_path/lib ./demo
79+
# in mac, to use DYLD_LIBRARY_PATH, it is normalized to use $rpath in dylib
80+
x86_64_build_dynamic : prepare_x86_64 easywsclient.o.x86_64
81+
install_name_tool -id @rpath/libplay_cpp_sdk.dylib ./lib/libplay_cpp_sdk.dylib
82+
otool -L ./lib/libplay_cpp_sdk.dylib
83+
arch -x86_64 \
84+
g++ -o demo \
85+
easywsclient.o \
86+
main.cc \
87+
chainmain.cc \
88+
cronos.cc \
89+
extra.cc \
90+
./include/walletconnectcallback.cc \
91+
./include/nft.cc \
92+
./include/pay.cc \
93+
./include/defi-wallet-core-cpp/src/contract.rs.cc \
94+
./include/defi-wallet-core-cpp/src/core.cc \
95+
./include/defi-wallet-core-cpp/src/nft.rs.cc \
96+
./include/defi-wallet-core-cpp/src/uint.rs.cc \
97+
./include/extra-cpp-bindings/src/lib.rs.cc \
98+
lib/libplay_cpp_sdk.dylib \
99+
lib/libcxxbridge1.a \
100+
-std=c++14 \
101+
-rpath lib \
102+
$(FLAGS)
103+
104+
68105
run_static:
69106
. ./.env && ./demostatic
70107

demo/main.cc

+25-12
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,34 @@
1717
#include <thread>
1818

1919
int main(int argc, char *argv[]) {
20-
try {
21-
chainmain_process(); // chain-main
22-
test_chainmain_nft(); // chainmain nft tests
23-
test_login(); // decentralized login
24-
cronos_process(); // cronos
25-
test_cronos_testnet(); // cronos testnet
26-
} catch (const rust::cxxbridge1::Error &e) {
27-
// Use `Assertion failed`, the same as `assert` function
20+
if (argc >= 2) {
21+
if ("test" == std::string(argv[1])) {
22+
// check wheter calling works
23+
try {
24+
test_login();
25+
std::cout<<"OK"<<std::endl;
26+
} catch (const std::exception &e) {
2827
std::cout << "Assertion failed: " << e.what() << std::endl;
28+
}
29+
return 0;
2930
}
31+
}
3032

31-
test_interval();
33+
try {
34+
chainmain_process(); // chain-main
35+
test_chainmain_nft(); // chainmain nft tests
36+
test_login(); // decentralized login
37+
cronos_process(); // cronos
38+
test_cronos_testnet(); // cronos testnet
39+
} catch (const rust::cxxbridge1::Error &e) {
40+
// Use `Assertion failed`, the same as `assert` function
41+
std::cout << "Assertion failed: " << e.what() << std::endl;
42+
}
3243

33-
test_blackscout_cronoscan();
34-
test_wallet_connect();
44+
test_interval();
3545

36-
return 0;
46+
test_blackscout_cronoscan();
47+
test_wallet_connect();
48+
49+
return 0;
3750
}

0 commit comments

Comments
 (0)