Issue when installing nana in codeblocks - codeblocks

I'm trying to use the nana c++ library for my user interface and i followed this tutorial https://github.com/qPCR4vir/nana-docs/wiki/Code-Blocks-Linux but when i try to compile this code :
#include <nana/gui.hpp>
#include <nana/gui/widgets/label.hpp>
int main()
{
using namespace nana;
form fm;
label lb{ fm, rectangle{ 10, 10, 100, 100 } };
lb.caption("Hello, world!");
fm.show();
exec();
}
I get this error : g++: error: unrecognized command line option ‘-nana’
I don't have any idea of what i'm doing wrong. How can i make it works ?

There was an error in the instructions, now fixed
Change -nana to -lnana

Related

build kernel module do_softirq() undefined

#include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h>
MODULE_LICENSE("Dual BSD/GPL");
static int example_init(void) {
printk("<1>EXAMPLE: init\n");
do_softirq();
return 0;
}
static void example_exit(void) {
printk("<1>EXAMPLE: exit\n");
}
module_init(example_init);
module_exit(example_exit);
Build the module on ubuntu 20.04. I got an error.
ERROR: "do_softirq" undefined!
Any suggestion how to fix this error?
Why do you need to run this procedure? It is internal kernel function which is invocated in particular circumstances - among others in some thread. You shouldn't invoke it from kernel's module.
To compile you example module you can try to export in kernel this symbol - like this:
EXPORT_SYMBOL(do_softirq);
in softirq.c file but it is not recommended. Try to look for tasklets, workqueue interface or kthreads instead.

build error: 'ParseCommandLineFlags' is not a member of 'google'

i am trying to use the google flags on vs2013, my main function is:
int main(int argc, char *argv[]) {
google::ParseCommandLineFlags(&argc, &argv, true);
google::InitGoogleLogging(argv[0]);
...
}
and vs2013 reports two build error:
error C2039: 'ParseCommandLineFlags' : is not a member of 'google'
error C3861: 'ParseCommandLineFlags': identifier not found
Anyone can help me ?
I had the same problem between different versions of GFLAGS on different servers, instead of explicitly using google or gflags namespace I used the GFLAGS_NAMESPACE namespace which is defined in gflags/gflags_declare.h, so it will always use the right namespace depending on the installed version.
So you can change this:
google::ParseCommandLineFlags(&argc, &argv, true);
to this:
#ifdef GFLAGS_NAMESPACE
GFLAGS_NAMESPACE::ParseCommandLineFlags(&argc, &argv, true);
#else
google::ParseCommandLineFlags(&argc, &argv, true);
#end

how to fix unsatisfiedLinkError when generating dll for JNI in windows platform using g++

I'm new to native programming. I've been trying to fix the unsatisfiedLinkError past 8-9 hours but got no result. After a lot of googling and stackoverflowing, I got sick of fixing it, I'm posting my problem here. Somebody please please help me.
I'm using g++ compiler in windows 32bit environment.
Here are the files that I've created:
Demo.java
class Demo
{
// Declaration of the native method
public native int methodOfC(int arg1);
/*The native keyword tells the compiler that the implementation of this method is in a native language*/
/*Loading the library containing the implementation of the native method*/
static
{
System.out.println("Control is in Java.......going to call a C program......\n");
System.loadLibrary("try");
System.out.println("Congr8s no prob in CallApi.....\n");
}
public static void main(String[] args)
{
//invoking the native method
int sendToC,getFrmC;
if(args.length!=0) sendToC=Integer.parseInt(args[0]);
else sendToC=999;
Demo ob1=new Demo();
getFrmC=ob1.methodOfC(sendToC);
System.out.println("This is in Java......\n Got "+ getFrmC +" in return from C.");
}//end main
}//end Demo
Demo.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Demo */
#ifndef _Included_Demo
#define _Included_Demo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Demo
* Method: methodOfC
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_Demo_methodOfC
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif
DemoImp.c
#include <jni.h>
#include "Demo.h"
#include <stdio.h>
//definition of methodOfC()
JNIEXPORT int JNICALL Java_Demo_methodOfC(JNIEnv* exeenv, jobject javaobj, int getFrmJava)
{
printf("This is in the C program\n Got %d from java",getFrmJava);
printf("\n.......Exiting frm C\n");
return getFrmJava+1;
}
Here is how I compiled and run my prog.: screenshot here
C:\native>javac Demo.java
C:\native>javah -jni Demo
C:\native>g++ -c -l"C:\Java\jdk1.6.0_26\include" -l"C:\Java\jdk1.6.0_26\include\win32" DemoImp.c
C:\native>g++ -shared DemoImp.o -o try.dll
C:\native>java Demo 1234
Control is in Java.......going to call a C program......
Congr8s no prob in CallApi.....
Exception in thread "main" java.lang.UnsatisfiedLinkError: Demo.methodOfC(I)I
at Demo.methodOfC(Native Method)
at Demo.main(Demo.java:23)
C:\native>
I've already added "C:\native" in my system path variable.
I've uploaded all my files in mediafire. Here's the link native.zip
If possible please tell me how can I make 64bit version of dll. Thanks in advance.
You have missed out the package name in the DemoImp.c file.
The naming convention for C function is Java_{package_and_classname}_{function_name}(JNI arguments). The dot in package name shall be replaced by underscore.

Error "C3145" and "C2061" in C++ Visual Studio

EDIT: What is C++/CLI? I am programming in Visual studio, and as far as I know using C++... Also, The first error was solved by Peter's comment, but I am still stuck on the second.
I am brand new to the world of C++, and have previously done all my work in Java. I am unfamiliar with the use of pointers and garbage collection (though I believe I understand the concept) and I believe that may be the source of my problems. I am getting the following error messages:
1>Runner.cpp(6): error C3145: 'formOutOfTime' : global or static variable may not have managed type 'System::Windows::Forms::Form ^'
1> may not declare a global or static variable, or a member of a native type that refers to objects in the gc heap
1>Runner.cpp(22): error C2061: syntax error : identifier 'FormOutOfTime'
My code is like this:
PurpleHealth.cpp (This is the file I believe the system calls to start it all off):
#include "FormOutOfTime.h"
#include "FormParentalOverride.h"
#include "Runner.h"
using namespace PurpleHealth;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
//Application::Run(gcnew FormOutOfTime());
Runner* runner = new Runner();
//delete runner;
return 0;
}
Runner.h (this is the header file I want to run all my main code, and launch the forms. I also struggle with the purpose behind the header files)
#include "stdafx.h"
#include "FormOutOfTime.h"
#include "FormParentalOverride.h"
class Runner
{
public:
Runner();
~Runner();
// functions
private:
void Go();
// member variables
};
And Finally Runner.cpp:
#include "stdafx.h"
#include "Runner.h"
#include "FormOutOfTime.h"
#include "FormParentalOverride.h"
//Variable Dclaration
System::Windows::Forms::Form^ formOutOfTime;//Error Here***************************
Runner::Runner()
{
// Do stuff if you need to
this->Go();
}
Runner::~Runner()
{
// Clear memory if you need to
}
void Runner::Go()
{
formOutOfTime = gcnew FormOutOfTime();//Error Here***************************
formOutOfTime->ShowDialog();
}
Please help me solve these messages, and even critique on form is appreciated. Thanks.
managed pointers cannot be declared at static or global scope. They can only be declared at function scope. Move the declaration of formOutOfTime from the top of the runner.cpp file to within the Go method

linking error when trying to use boost::asio

I think i'm getting crazy, im trying to compile a simple project to understand how to work with io_service and I cant compile it.
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
class testClass
{
unsigned int other_number;
unsigned int main_number;
boost::asio::io_service& io_serv;
public:
testClass(boost::asio::io_service& io) : other_number(0), io_serv(io), main_number(0){io_serv.post(boost::bind(&testClass::printNumbers, this));}
void changeNumber(int num)
{
io_serv.post(boost::bind(&testClass::doChangeNumber, this, num));
}
private:
void doChangeNumber(int num)
{
main_number = num;
}
void printNumbers()
{
std::cout<<"Main number is: "<<main_number<<" Other number is:"<<other_number<<std::endl;
other_number++;
Sleep(1000);
io_serv.post(boost::bind(&testClass::printNumbers, this));
}
};
void main()
{
boost::asio::io_service io_serv;
testClass tc(io_serv);
io_serv.run();
int num = 0;
while (true)
{
tc.changeNumber(num++);
Sleep(2000);
}
}
I did add in "project property->c/c++->general->additional include directories" the line: "C:\Program Files (x86)\boost_1_44_0";
And I did add in "project property->linker->additional library directories" the line: "C:\Program Files (x86)\boost_1_44_0\libs";
but nothing seems to work...
I'm using visual studio 2010..
there are no .lib files in boost_1_44_0\libs... I downloaded it 2 times from boost's site just to make sure..
no matter what I do, I always get LINK : fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-gd-1_44.lib'
You can build the Boost libs on your local system using bjam as described here (Section 5.2). Once you have done that you should be good to go - use this from a Visual Studio command prompt and make sure your project has the correct LIB path.
The prebuilt libs will only be there by default if you use the installer from Boost Pro Computing, I believe.

Resources