Я скачал следующую библиотеку C ++ (коммерческий безголовый браузер) http://wiki.awesomium.com/. Я распаковал его, и структура каталогов выглядит следующим образом:
/opt/awesomium_v1.7.2_sdk_linux64/bin
содержит файлы:
awesomium_pak_utility awesomium_process awesomium_sample_webflow libawesomium-1-7.so.2.0
Следующий путь включает включаемые файлы:
/opt/awesomium_v1.7.2_sdk_linux64/include/Awesomium# ls
BitmapSurface.h DataSource.h JSValue.h ResourceInterceptor.h WebConfig.h WebKeyboardEvent.h WebSession.h WebTouchEvent.h WebViewListener.h
ChildProcess.h JSArray.h Platform.h STLHelpers.h WebCore.h WebMenuItem.h WebStringArray.h WebURL.h
DataPak.h JSObject.h PrintConfig.h Surface.h WebKeyboardCodes.h WebPreferences.h WebString.h WebView.h
Итак, в пакет включен очень простой пример демонстрационного кода, который я пытаюсь скомпилировать:
/opt/awesomium_v1.7.2_sdk_linux64/samples/hello# cat main.cc
/**
* This is a simple "Hello World!" example of using Awesomium.
*
* It loads a page and saves a rendered bitmap of it to a JPEG.
*
* Procedure:
* -- Create the WebCore singleton
* -- Create a new WebView and request for it to load a URL.
* -- Wait for the WebView to finish loading.
* -- Retrieve the BitmapSurface from the WebView.
* -- Save the BitmapSurface to 'result.jpg'.
* -- Clean up.
*/
// Various included headers
#include <Awesomium/WebCore.h>
#include <Awesomium/BitmapSurface.h>
#include <Awesomium/STLHelpers.h>
#include <iostream>
#if defined(__WIN32__) || defined(_WIN32)
#include <windows.h>
#elif defined(__APPLE__)
#include <unistd.h>
#endif
// Various macro definitions
#define WIDTH 800
#define HEIGHT 600
#define URL "http://www.google.com"
using namespace Awesomium;
// Forward declaration of our update function
void Update(int sleep_ms);
// Our main program
int main() {
// Create the WebCore singleton with default configuration
WebCore* web_core = WebCore::Initialize(WebConfig());
// Create a new WebView instance with a certain width and height, using the
// WebCore we just created
WebView* view = web_core->CreateWebView(WIDTH, HEIGHT);
// Load a certain URL into our WebView instance
WebURL url(WSLit(URL));
view->LoadURL(url);
std::cout << "Page is now loading..." << std::endl;;
// Wait for our WebView to finish loading
while (view->IsLoading())
Update(50);
std::cout << "Page has finished loading." << std::endl;
std::cout << "Page title is: " << view->title() << std::endl;
// Update once more a little longer to allow scripts and plugins
// to finish loading on the page.
Update(300);
// Get the WebView's rendering Surface. The default Surface is of
// type 'BitmapSurface', we must cast it before we can use it.
BitmapSurface* surface = (BitmapSurface*)view->surface();
// Make sure our surface is not NULL-- it may be NULL if the WebView
// process has crashed.
if (surface != NULL) {
// Save our BitmapSurface to a JPEG image
surface->SaveToJPEG(WSLit("./result.jpg"));
std::cout << "Saved a render of the page to 'result.jpg'." << std::endl;
// Open up the saved JPEG
#if defined(__WIN32__) || defined(_WIN32)
system("start result.jpg");
#elif defined(__APPLE__)
system("open result.jpg");
#endif
}
// Destroy our WebView instance
view->Destroy();
// Update once more before we shutdown for good measure
Update(100);
// Destroy our WebCore instance
WebCore::Shutdown();
return 0;
}
void Update(int sleep_ms) {
// Sleep a specified amount
#if defined(__WIN32__) || defined(_WIN32)
Sleep(sleep_ms);
#elif defined(__APPLE__)
usleep(sleep_ms * 1000);
#endif
// You must call WebCore::update periodically
// during the lifetime of your application.
WebCore::instance()->Update();
}
Я пытаюсь скомпилировать его следующим образом:
gcc -o main -Wall -I/opt/awesomium_v1.7.2_sdk_linux64/include/Awesomium/ -L/opt/awesomium_v1.7.2_sdk_linux64/bin -lawesomium-1-7 main.cc
Тем не менее, я получаю следующее сообщение об ошибке на консоли:
/opt/awesomium_v1.7.2_sdk_linux64/samples/hello# gcc -o main -Wall -I/opt/awesomium_v1.7.2_sdk_linux64/include/Awesomium/ -L/opt/awesomium_v1.7.2_sdk_linux64/bin -lawesomium-1-7 main.cc
main.cc:16:31: error: Awesomium/WebCore.h: No such file or directory
main.cc:17:37: error: Awesomium/BitmapSurface.h: No such file or directory
main.cc:18:34: error: Awesomium/STLHelpers.h: No such file or directory
main.cc:31: error: ‘Awesomium’ is not a namespace-name
main.cc:31: error: expected namespace-name before ‘;’ token
main.cc: In function ‘int main()’:
main.cc:39: error: ‘WebCore’ was not declared in this scope
main.cc:39: error: ‘web_core’ was not declared in this scope
main.cc:39: error: ‘WebCore’ is not a class or namespace
main.cc:39: error: ‘WebConfig’ was not declared in this scope
main.cc:43: error: ‘WebView’ was not declared in this scope
main.cc:43: error: ‘view’ was not declared in this scope
main.cc:46: error: ‘WebURL’ was not declared in this scope
main.cc:46: error: expected ‘;’ before ‘url’
main.cc:47: error: ‘url’ was not declared in this scope
main.cc:65: error: ‘BitmapSurface’ was not declared in this scope
main.cc:65: error: ‘surface’ was not declared in this scope
main.cc:65: error: expected primary-expression before ‘)’ token
main.cc:65: error: expected ‘;’ before ‘view’
main.cc:71: error: ‘WSLit’ was not declared in this scope
main.cc:90: error: ‘WebCore’ is not a class or namespace
main.cc: In function ‘void Update(int)’:
main.cc:105: error: ‘WebCore’ has not been declared
Что я делаю неправильно?
Ваш путь включения кажется неверным. Попробуй скомпилировать с
gcc -o main -Wall -I/opt/awesomium_v1.7.2_sdk_linux64/include -L/opt/awesomium_v1.7.2_sdk_linux64/bin -lawesomium-1-7 main.cc
Других решений пока нет …