I am badly stuck, can someone give inputs to proceed.
because libcurl provides curl_easy_init, so you need -lcurl
then try and solve your issue with ipk
Hi, there was a similar problem. I added libcurl.a and everything was going
Can you suggest me on how did you include libcurl.a with some more explanation. I am not able to add it that way to openwrt Makefile.
Thank you.
Yes, this is an OpenWrt buildroot integrity check to ensure that your program package depends on all libraries it requires. To solve that, specify DEPENDS:=+libcurl
in your Package/xxx
section.
i have added DEPENDS:=+libcurl
it is not able to generate .ipk file. Any sample example would help. Any additional settings are env variables to be set ? It is automatically refererring to the libcurl library in /usr/lib/x86.../libcurl-gnutls-dev.so.4. When already the libcurl and its ipk are available in openwrt, why to link externally.
Actual error messages as well as your current Makefile are needed to help you here. Statements like "is not able to generate .ipk file" do not help.
My assumption is that your inner application makefile (the non-OpenWrt one) is not cross compile safe and hardcodes things like "gcc" instead of referring to $(CC)
I have code in the path package/samplepgm/src/.
The Makefile inside package/samplepgm/src is as below:
CURL_LIB = -L~/staging_dir/target-aarch64_cortex-a53_musl/root-brcm2708/usr/lib/libcurl.so.4.5.0
samplepgm: samplepgm.o
$(CC) $(LDFLAGS) samplepgm.o -o samplepgm $(CURL_LIB) -lcurl
samplepgm.o: samplepgm.c
$(CC) $(CFLAGS) -c samplepgm.c
clean:
rm *.o samplepgm
Outer Makefile in the path Package/Samplepgm is as below include $(TOPDIR)/rules.mk
PKG_NAME:=samplepgm
PKG_VERSION:=1.0.1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
define Package/samplepgm
SECTION:=utils
CATEGORY:=Utilities
TITLE:=samplepgm
DEPENDS:=+libcurl
endef
define Package/samplepgm/Default
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Package/samplepgmc
$(call Package/samplepgmc/Default)
TITLE+= (compiler)
endef
define Package/libsamplepgm
$(call Package/samplepgm/Default
SUBMENU:=
SECTION:=libs
CATEGORY:=Libraries
TITLE+=(libraries)
endef
CURL_LIB:= -L~/staging_dir/target-aarch64_cortex-a53_musl/root-brcm2708/usr/lib/libcurl.so.4.5.0
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) $(INC) \
LIBS+="$(CURL_LIB)" \
LDFLAGS="$(TARGET_LDFLAGS)" \
CFLAGS="$(TARGET_CFLAGS) " \
$(TARGET_CONFIGURE_OPTS) \
CROSS="$(TARGET_CROSS)" \
ARCH="$(ARCH)" \
$(1);
endef
define Package/samplepgm/install
$(call Install/samplepgm,$(1))
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/samplepgm $(1)/usr/bin/
endef
$(eval $(call BuildPackage,samplepgm))
package/samplepgm/Makefile [+] 1,1
Please let me know if there is any mistake. It is referring to /usr/lib libraries. Now, while typing here, i have just removed the below part from outer Makefile and compiled again and now it generated the .ipk file for my component.
define Package/libsamplepgm
$(call Package/samplepgm/Default
SUBMENU:=
SECTION:=libs
CATEGORY:=Libraries
TITLE+=(libraries)
endef
Is there a link or doc with proper of explanation on each parameter of the Makefile?
First of all remove the Build/Compile
override, remove any CURL_LIB:=
assignments, then proceed with make package/samplepgm/{clean,compile} V=sc
and post the resulting errors here, if any.
Since you redefined Build/Compile
to a manual $(MAKE)
invocation, you dropped the passing of $(MAKE_FLAGS)
which includes things like CC="$(TARGET_CC)"
- this causes your inner Makefile to use the host compiler instead of the OpenWrt toolchain.
Now, its throwing the below error
Package samplepgm is missing dependencies for the following libraries
~openwrt_rpi/openwrt/scripts ~/staging_dir/target-aarch64_cortex-a53_musl/pkginfo
libcurl-gnutls.so.4
Makefile:81: recipe for target '~/openwrt/bin/packages/aarch64_cortex-a53/base/samplepgm_1.0.1_aarch64_cortex-a53.ipk' failed
make[2]: *** [~/openwrt/bin/packages/aarch64_cortex-a53/base/samplepgm_1.0.1_aarch64_cortex-a53.ipk] Error 1
make[2]: Leaving directory '~/openwrt/package/samplepgm'
Command exited with non-zero status 2
time: package/samplepgm/compile#0.18#0.05#0.21
package/Makefile:107: recipe for target 'package/samplepgm/compile' failed
make[1]: *** [package/samplepgm/compile] Error 2
make[1]: Leaving directory '~/openwrt'
~/openwrt/include/toplevel.mk:216: recipe for target 'package/samplepgm/compile' failed
make: *** [package/samplepgm/compile] Error 2
how can i modify that, should i not have Build/compile at all ?
The default Build/Compile
recipe is usually sufficient, you can find its definition in include/package-defaults.mk
.
Please ensure that package/samplepgm/src/
is clean and contains only *.c
and *.h
files (plus scripts, Makefiles etc. that might be required) and no *.o
files or even precompiled exectuables.
The samplepgm/src is clean and dont have any .o or exe's. Though it is showing the same error.
Can i take these two parts of the package-defaults.mk -
144 define Build/Compile/Default
145 +$(MAKE_VARS)
146 $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(MAKE_PATH)
147 $(MAKE_FLAGS)
148 $(1);
149 endef
150
151 define Build/Install/Default
152 $(MAKE_VARS)
153 $(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH)
154 $(MAKE_INSTALL_FLAGS)
155 $(if $(1), $(1), install);
156 endef
Then provide the output of ./staging_dir/toolchain-aarch64_cortex-a53*/bin/readelf -a ./build_dir/target-aarch64_cortex-a53_musl/samplepgm*/samplepgm
You could, but there is no point in copying these recipes 1:1
ok, Thank you so much for your help. Any good link to understand the openwrt build system?
Hi. I did so.
-
Get source files open wrt.
-
make menuconfig check libcur and create SDK
-
Commpiled
-
Finded path dir with libcur.a and libcur.so
-
To Eclipce add libcur Right butto project Settings -> Libraries top window add simle curl
bottom add path to dir lib my path - /home/source/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl-1.1.16/lib -
Add Settings-> PATH /home/source/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl-1.1.16/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
-
Add project files curl.h and etc
Thanks Klen
Hi jow,
The above procedure working fine and generated the cross compiled binary for c program.
For c++ program, the image is generated for x86 only. Any suggestions please...
Thanks & Regards,
Saritha
Hi,
I believe I have the same issue. If you could suggest where I am wrong.
I don't know about build path or how to add to Makefile.
Openwrt compiling package depended on libcurl